mirror of
https://github.com/bitwarden/mobile
synced 2025-12-26 05:03:39 +00:00
Compare commits
1 Commits
main
...
mobiletf/p
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cb76755973 |
24
.github/CODEOWNERS
vendored
24
.github/CODEOWNERS
vendored
@@ -7,6 +7,15 @@
|
|||||||
# Default file owners
|
# Default file owners
|
||||||
* @bitwarden/dept-development-mobile
|
* @bitwarden/dept-development-mobile
|
||||||
|
|
||||||
|
# DevOps for Actions and other workflow changes
|
||||||
|
.github/workflows @bitwarden/dept-devops
|
||||||
|
|
||||||
|
# DevOps for Version Bumping
|
||||||
|
src/App/Platforms/Android/AndroidManifest.xml
|
||||||
|
src/iOS.Autofill/Info.plist
|
||||||
|
src/iOS.Extension/Info.plist
|
||||||
|
src/iOS.ShareExtension/Info.plist
|
||||||
|
src/App/Platforms/iOS/Info.plist
|
||||||
|
|
||||||
## Auth team files ##
|
## Auth team files ##
|
||||||
|
|
||||||
@@ -34,18 +43,3 @@ store/google/en
|
|||||||
|
|
||||||
## Utils ##
|
## Utils ##
|
||||||
store/google/Publisher
|
store/google/Publisher
|
||||||
|
|
||||||
## These workflows have joint ownership ##
|
|
||||||
.github/workflows/build.yml @bitwarden/dept-bre @bitwarden/dept-development-mobile
|
|
||||||
.github/workflows/build-beta.yml @bitwarden/dept-bre @bitwarden/dept-development-mobile
|
|
||||||
.github/workflows/cleanup-rc-branch.yml @bitwarden/dept-bre @bitwarden/dept-development-mobile
|
|
||||||
.github/workflows/release.yml @bitwarden/dept-bre @bitwarden/dept-development-mobile
|
|
||||||
.github/workflows/version-auto-bump.yml @bitwarden/dept-bre @bitwarden/dept-development-mobile
|
|
||||||
.github/workflows/version-bump.yml @bitwarden/dept-bre @bitwarden/dept-development-mobile
|
|
||||||
|
|
||||||
# Shared ownership for version bump automation
|
|
||||||
src/App/Platforms/Android/AndroidManifest.xml
|
|
||||||
src/iOS.Autofill/Info.plist
|
|
||||||
src/iOS.Extension/Info.plist
|
|
||||||
src/iOS.ShareExtension/Info.plist
|
|
||||||
src/App/Platforms/iOS/Info.plist
|
|
||||||
|
|||||||
18
.github/ISSUE_TEMPLATE/bug.yml
vendored
18
.github/ISSUE_TEMPLATE/bug.yml
vendored
@@ -6,20 +6,8 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
Thanks for taking the time to fill out this bug report!
|
Thanks for taking the time to fill out this bug report!
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Testing the new Bitwarden Beta apps? Submit your report in [bitwarden/android](https://github.com/bitwarden/android) or [bitwarden/ios](https://github.com/bitwarden/ios)
|
|
||||||
|
|
||||||
|
|
||||||
Please do not submit feature requests. The [Community Forums](https://community.bitwarden.com) has a section for submitting, voting for, and discussing product feature requests.
|
Please do not submit feature requests. The [Community Forums](https://community.bitwarden.com) has a section for submitting, voting for, and discussing product feature requests.
|
||||||
- type: checkboxes
|
|
||||||
id: production
|
|
||||||
attributes:
|
|
||||||
label: Production Build
|
|
||||||
options:
|
|
||||||
- label: I'm using the legacy Bitwarden app pubicly available in App Store / Play Store and I'm aware that Bitwarden Beta bugs should be reported in [bitwarden/android](https://github.com/bitwarden/android) or [bitwarden/ios](https://github.com/bitwarden/ios)
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: reproduce
|
id: reproduce
|
||||||
attributes:
|
attributes:
|
||||||
@@ -85,3 +73,9 @@ body:
|
|||||||
description: What version of our software are you running? (go to "Settings" → "About" in the app)
|
description: What version of our software are you running? (go to "Settings" → "About" in the app)
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
- type: checkboxes
|
||||||
|
id: beta
|
||||||
|
attributes:
|
||||||
|
label: Beta
|
||||||
|
options:
|
||||||
|
- label: Using a pre-release version of the application.
|
||||||
|
|||||||
6
.github/ISSUE_TEMPLATE/config.yml
vendored
6
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,11 +1,5 @@
|
|||||||
blank_issues_enabled: false
|
blank_issues_enabled: false
|
||||||
contact_links:
|
contact_links:
|
||||||
- name: Native Android Beta Bug Reports
|
|
||||||
url: https://github.com/bitwarden/android/issues
|
|
||||||
about: Bugs found in the new native Android Beta app should be reported in [bitwarden/android](https://github.com/bitwarden/android)
|
|
||||||
- name: Native iOS BETA Bug Reports
|
|
||||||
url: https://github.com/bitwarden/ios/issues
|
|
||||||
about: Bugs found in the new native iOS Beta app should be reported in [bitwarden/ios](https://github.com/bitwarden/ios)
|
|
||||||
- name: Customer Support
|
- name: Customer Support
|
||||||
url: https://bitwarden.com/contact/
|
url: https://bitwarden.com/contact/
|
||||||
about: Please contact our customer support for account issues and general customer support.
|
about: Please contact our customer support for account issues and general customer support.
|
||||||
|
|||||||
1
.github/renovate.json
vendored
1
.github/renovate.json
vendored
@@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"enabled": false,
|
|
||||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
"extends": [
|
"extends": [
|
||||||
"config:base",
|
"config:base",
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
name: Automatic responses
|
name: Automatic responses
|
||||||
on:
|
on:
|
||||||
issues:
|
issues:
|
||||||
|
|||||||
29
.github/workflows/build-beta.yml
vendored
29
.github/workflows/build-beta.yml
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
name: Build Beta
|
name: Build Beta
|
||||||
|
|
||||||
on:
|
on:
|
||||||
@@ -23,7 +24,7 @@ jobs:
|
|||||||
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@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
with:
|
with:
|
||||||
submodules: 'true'
|
submodules: 'true'
|
||||||
|
|
||||||
@@ -47,9 +48,9 @@ jobs:
|
|||||||
runs-on: macos-14
|
runs-on: macos-14
|
||||||
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
|
app_ci_output_filename: App_x64_Debug
|
||||||
steps:
|
steps:
|
||||||
- name: Set XCode version
|
- name: Set XCode version
|
||||||
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
|
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
|
||||||
@@ -62,7 +63,7 @@ jobs:
|
|||||||
nuget-version: 6.4.0
|
nuget-version: 6.4.0
|
||||||
|
|
||||||
- name: Set up .NET
|
- name: Set up .NET
|
||||||
uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4.0.1
|
uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4.0.0
|
||||||
with:
|
with:
|
||||||
dotnet-version: '8.0.x'
|
dotnet-version: '8.0.x'
|
||||||
|
|
||||||
@@ -79,7 +80,7 @@ jobs:
|
|||||||
echo "GitHub event: $GITHUB_EVENT"
|
echo "GitHub event: $GITHUB_EVENT"
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
ref: ${{ inputs.ref }}
|
ref: ${{ inputs.ref }}
|
||||||
@@ -135,7 +136,7 @@ jobs:
|
|||||||
|
|
||||||
echo "### CFBundleVersion $BUILD_NUMBER" >> $GITHUB_STEP_SUMMARY
|
echo "### CFBundleVersion $BUILD_NUMBER" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
perl -0777 -pi.bak -e 's/<key>CFBundleVersion<\/key>\s*<string>1<\/string>/<key>CFBundleVersion<\/key>\n\t<string>'"$BUILD_NUMBER"'<\/string>/' ./${{ env._IOS_FOLDER_PATH }}/Info.plist
|
perl -0777 -pi.bak -e 's/<key>CFBundleVersion<\/key>\s*<string>1<\/string>/<key>CFBundleVersion<\/key>\n\t<string>'"$BUILD_NUMBER"'<\/string>/' ./${{ env.ios_folder_path }}/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.Extension/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.Extension/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.Autofill/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.Autofill/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
|
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
|
||||||
@@ -145,7 +146,7 @@ jobs:
|
|||||||
- name: Update Entitlements
|
- name: Update Entitlements
|
||||||
run: |
|
run: |
|
||||||
echo "##### Updating Entitlements"
|
echo "##### Updating Entitlements"
|
||||||
perl -0777 -pi.bak -e 's/<key>aps-environment<\/key>\s*<string>development<\/string>/<key>aps-environment<\/key>\n\t<string>beta<\/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>beta<\/string>/' ./${{ env.ios_folder_path }}/Entitlements.plist
|
||||||
|
|
||||||
- name: Get certificates
|
- name: Get certificates
|
||||||
run: |
|
run: |
|
||||||
@@ -245,8 +246,8 @@ jobs:
|
|||||||
ARCHIVE_PATH: ./${{ env.main_app_folder_path }}/bin/Debug/${{ env.target-net-version }}-ios/iossimulator-x64
|
ARCHIVE_PATH: ./${{ env.main_app_folder_path }}/bin/Debug/${{ env.target-net-version }}-ios/iossimulator-x64
|
||||||
EXPORT_PATH: ./bitwarden-export
|
EXPORT_PATH: ./bitwarden-export
|
||||||
run: |
|
run: |
|
||||||
zip -r -q ${{ env._APP_CI_OUTPUT_FILENAME }}.app.zip $ARCHIVE_PATH
|
zip -r -q ${{ env.app_ci_output_filename }}.app.zip $ARCHIVE_PATH
|
||||||
mv ${{ env._APP_CI_OUTPUT_FILENAME }}.app.zip $EXPORT_PATH
|
mv ${{ env.app_ci_output_filename }}.app.zip $EXPORT_PATH
|
||||||
|
|
||||||
- name: Show Bitwarden Export
|
- name: Show Bitwarden Export
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -265,7 +266,7 @@ jobs:
|
|||||||
cp -r -v $WATCH_ARCHIVE_DSYMS_PATH $WATCH_DSYMS_EXPORT_PATH
|
cp -r -v $WATCH_ARCHIVE_DSYMS_PATH $WATCH_DSYMS_EXPORT_PATH
|
||||||
|
|
||||||
- name: Upload App Store .ipa & dSYMs artifacts
|
- name: Upload App Store .ipa & dSYMs artifacts
|
||||||
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
|
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
||||||
with:
|
with:
|
||||||
name: Bitwarden iOS
|
name: Bitwarden iOS
|
||||||
path: |
|
path: |
|
||||||
@@ -274,10 +275,10 @@ jobs:
|
|||||||
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@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
|
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
||||||
with:
|
with:
|
||||||
name: ${{ env._APP_CI_OUTPUT_FILENAME }}.app.zip
|
name: ${{ env.app_ci_output_filename }}.app.zip
|
||||||
path: ./bitwarden-export/${{ env._APP_CI_OUTPUT_FILENAME }}.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
|
||||||
|
|||||||
183
.github/workflows/build.yml
vendored
183
.github/workflows/build.yml
vendored
@@ -1,14 +1,19 @@
|
|||||||
|
---
|
||||||
name: Build
|
name: Build
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
push:
|
||||||
|
branches-ignore:
|
||||||
|
- "l10n_master"
|
||||||
|
- "gh-pages"
|
||||||
|
paths-ignore:
|
||||||
|
- ".github/workflows/**"
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
main_app_folder_path: src/App
|
main_app_folder_path: src/App
|
||||||
main_app_project_path: src/App/App.csproj
|
main_app_project_path: src/App/App.csproj
|
||||||
target-net-version: net8.0
|
target-net-version: net8.0
|
||||||
dotnet-version: '8.0.402'
|
|
||||||
maui-workload-version: '8.0.402'
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
cloc:
|
cloc:
|
||||||
@@ -16,7 +21,7 @@ jobs:
|
|||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
|
|
||||||
- name: Set up CLOC
|
- name: Set up CLOC
|
||||||
run: |
|
run: |
|
||||||
@@ -35,7 +40,7 @@ jobs:
|
|||||||
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@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
with:
|
with:
|
||||||
submodules: 'true'
|
submodules: 'true'
|
||||||
|
|
||||||
@@ -64,31 +69,27 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
variant: ["prod", "qa"]
|
variant: ["prod", "qa"]
|
||||||
env:
|
env:
|
||||||
_ANDROID_FOLDER_PATH: src\App\Platforms\Android
|
android_folder_path: src\App\Platforms\Android
|
||||||
_ANDROID_FOLDER_PATH_BASH: src/App/Platforms/Android
|
android_folder_path_bash: src/App/Platforms/Android
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
|
||||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Setup NuGet
|
- name: Setup NuGet
|
||||||
uses: nuget/setup-nuget@a21f25cd3998bf370fde17e3f1b4c12c175172f9 # v2.0.0
|
uses: nuget/setup-nuget@a21f25cd3998bf370fde17e3f1b4c12c175172f9 # v2.0.0
|
||||||
with:
|
with:
|
||||||
nuget-version: 6.4.0
|
nuget-version: 6.4.0
|
||||||
|
|
||||||
- name: Set up .NET
|
- name: Set up .NET
|
||||||
uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4.0.1
|
uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4.0.0
|
||||||
with:
|
with:
|
||||||
dotnet-version: ${{ env.dotnet-version }}
|
dotnet-version: '8.0.x'
|
||||||
|
|
||||||
- name: Install MAUI Workload
|
|
||||||
run: |
|
|
||||||
dotnet workload install maui --version ${{ env.maui-workload-version }}
|
|
||||||
|
|
||||||
- name: Set up MSBuild
|
- name: Set up MSBuild
|
||||||
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2.0.0
|
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2.0.0
|
||||||
|
|
||||||
|
# This step might be obsolete at some point as .NET MAUI workloads
|
||||||
|
# are starting to come pre-installed on the GH Actions build agents.
|
||||||
|
- name: Install MAUI Workload
|
||||||
|
run: dotnet workload install maui --ignore-failed-sources
|
||||||
|
|
||||||
- name: Setup Windows builder
|
- name: Setup Windows builder
|
||||||
run: choco install checksum --no-progress
|
run: choco install checksum --no-progress
|
||||||
|
|
||||||
@@ -107,6 +108,11 @@ jobs:
|
|||||||
echo "GitHub ref: $GITHUB_REF"
|
echo "GitHub ref: $GITHUB_REF"
|
||||||
echo "GitHub event: $GITHUB_EVENT"
|
echo "GitHub event: $GITHUB_EVENT"
|
||||||
|
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Login to Azure - CI Subscription
|
- name: Login to Azure - CI Subscription
|
||||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||||
with:
|
with:
|
||||||
@@ -120,9 +126,9 @@ jobs:
|
|||||||
mkdir -p $HOME/secrets
|
mkdir -p $HOME/secrets
|
||||||
|
|
||||||
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
||||||
--name app_play-keystore.jks --file ./${{ env._ANDROID_FOLDER_PATH_BASH }}/app_play-keystore.jks --output none
|
--name app_play-keystore.jks --file ./${{ env.android_folder_path_bash }}/app_play-keystore.jks --output none
|
||||||
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
||||||
--name app_upload-keystore.jks --file ./${{ env._ANDROID_FOLDER_PATH_BASH }}/app_upload-keystore.jks --output none
|
--name app_upload-keystore.jks --file ./${{ env.android_folder_path_bash }}/app_upload-keystore.jks --output none
|
||||||
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
||||||
--name play_creds.json --file $HOME/secrets/play_creds.json --output none
|
--name play_creds.json --file $HOME/secrets/play_creds.json --output none
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -134,16 +140,16 @@ jobs:
|
|||||||
CONTAINER_NAME: mobile
|
CONTAINER_NAME: mobile
|
||||||
run: |
|
run: |
|
||||||
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
|
||||||
--name google-services.json --file ./${{ env._ANDROID_FOLDER_PATH_BASH }}/google-services.json --output none
|
--name google-services.json --file ./${{ env.android_folder_path_bash }}/google-services.json --output none
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- name: Increment version
|
- name: Increment version
|
||||||
run: |
|
run: |
|
||||||
BUILD_NUMBER=$((11000 + $GITHUB_RUN_NUMBER))
|
BUILD_NUMBER=$((3000 + $GITHUB_RUN_NUMBER))
|
||||||
echo "##### Setting Android Version Code to $BUILD_NUMBER" | tee -a $GITHUB_STEP_SUMMARY
|
echo "##### Setting Android Version Code to $BUILD_NUMBER" | tee -a $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
sed -i "s/android:versionCode=\"1\"/android:versionCode=\"$BUILD_NUMBER\"/" \
|
sed -i "s/android:versionCode=\"1\"/android:versionCode=\"$BUILD_NUMBER\"/" \
|
||||||
./${{ env._ANDROID_FOLDER_PATH_BASH }}/AndroidManifest.xml
|
./${{ env.android_folder_path_bash }}/AndroidManifest.xml
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- name: Restore packages
|
- name: Restore packages
|
||||||
@@ -187,7 +193,7 @@ jobs:
|
|||||||
}
|
}
|
||||||
Write-Output "##### Sign Google Play Bundle Release Configuration"
|
Write-Output "##### Sign Google Play Bundle Release Configuration"
|
||||||
|
|
||||||
$signingUploadKeyStore = "$($env:GITHUB_WORKSPACE)\${{ env._ANDROID_FOLDER_PATH }}\app_upload-keystore.jks"
|
$signingUploadKeyStore = "$($env:GITHUB_WORKSPACE)\${{ env.android_folder_path }}\app_upload-keystore.jks"
|
||||||
dotnet publish $projToBuild -c Release -f ${{ env.target-net-version }}-android `
|
dotnet publish $projToBuild -c Release -f ${{ env.target-net-version }}-android `
|
||||||
/p:AndroidPackageFormats=aab `
|
/p:AndroidPackageFormats=aab `
|
||||||
/p:AndroidKeyStore=true `
|
/p:AndroidKeyStore=true `
|
||||||
@@ -204,7 +210,7 @@ jobs:
|
|||||||
|
|
||||||
Write-Output "##### Sign APK Release Configuration"
|
Write-Output "##### Sign APK Release Configuration"
|
||||||
|
|
||||||
$signingPlayKeyStore = "$($env:GITHUB_WORKSPACE)\${{ env._ANDROID_FOLDER_PATH }}\app_play-keystore.jks"
|
$signingPlayKeyStore = "$($env:GITHUB_WORKSPACE)\${{ env.android_folder_path }}\app_play-keystore.jks"
|
||||||
dotnet publish $projToBuild -c Release -f ${{ env.target-net-version }}-android `
|
dotnet publish $projToBuild -c Release -f ${{ env.target-net-version }}-android `
|
||||||
/p:AndroidKeyStore=true `
|
/p:AndroidKeyStore=true `
|
||||||
/p:AndroidSigningKeyStore=$signingPlayKeyStore `
|
/p:AndroidSigningKeyStore=$signingPlayKeyStore `
|
||||||
@@ -220,7 +226,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload Prod .aab artifact
|
- name: Upload Prod .aab artifact
|
||||||
if: ${{ matrix.variant == 'prod' }}
|
if: ${{ matrix.variant == 'prod' }}
|
||||||
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
|
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
||||||
with:
|
with:
|
||||||
name: com.x8bit.bitwarden.aab
|
name: com.x8bit.bitwarden.aab
|
||||||
path: ./com.x8bit.bitwarden.aab
|
path: ./com.x8bit.bitwarden.aab
|
||||||
@@ -228,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@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
|
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
||||||
with:
|
with:
|
||||||
name: com.x8bit.bitwarden.apk
|
name: com.x8bit.bitwarden.apk
|
||||||
path: ./com.x8bit.bitwarden.apk
|
path: ./com.x8bit.bitwarden.apk
|
||||||
@@ -236,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@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
|
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.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
|
||||||
@@ -256,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@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
|
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.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
|
||||||
@@ -264,7 +270,7 @@ 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@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
|
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.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
|
||||||
@@ -289,32 +295,28 @@ jobs:
|
|||||||
name: F-Droid Build
|
name: F-Droid Build
|
||||||
runs-on: windows-2022
|
runs-on: windows-2022
|
||||||
env:
|
env:
|
||||||
_ANDROID_FOLDER_PATH: src\App\Platforms\Android
|
android_folder_path: src\App\Platforms\Android
|
||||||
_ANDROID_FOLDER_PATH_BASH: src/App/Platforms/Android
|
android_folder_path_bash: src/App/Platforms/Android
|
||||||
_ANDROID_MANIFEST_PATH: src/App/Platforms/Android/AndroidManifest.xml
|
android_manifest_path: src/App/Platforms/Android/AndroidManifest.xml
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
|
||||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Setup NuGet
|
- name: Setup NuGet
|
||||||
uses: nuget/setup-nuget@a21f25cd3998bf370fde17e3f1b4c12c175172f9 # v2.0.0
|
uses: nuget/setup-nuget@a21f25cd3998bf370fde17e3f1b4c12c175172f9 # v2.0.0
|
||||||
with:
|
with:
|
||||||
nuget-version: 6.4.0
|
nuget-version: 6.4.0
|
||||||
|
|
||||||
- name: Set up .NET
|
- name: Set up .NET
|
||||||
uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4.0.1
|
uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4.0.0
|
||||||
with:
|
with:
|
||||||
dotnet-version: ${{ env.dotnet-version }}
|
dotnet-version: '8.0.x'
|
||||||
|
|
||||||
- name: Install MAUI Workload
|
|
||||||
run: |
|
|
||||||
dotnet workload install maui --version ${{ env.maui-workload-version }}
|
|
||||||
|
|
||||||
- name: Set up MSBuild
|
- name: Set up MSBuild
|
||||||
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2.0.0
|
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2.0.0
|
||||||
|
|
||||||
|
# This step might be obsolete at some point as .NET MAUI workloads
|
||||||
|
# are starting to come pre-installed on the GH Actions build agents.
|
||||||
|
- name: Install MAUI Workload
|
||||||
|
run: dotnet workload install maui --ignore-failed-sources
|
||||||
|
|
||||||
- name: Setup Windows builder
|
- name: Setup Windows builder
|
||||||
run: choco install checksum --no-progress
|
run: choco install checksum --no-progress
|
||||||
|
|
||||||
@@ -332,6 +334,9 @@ jobs:
|
|||||||
echo "GitHub ref: $GITHUB_REF"
|
echo "GitHub ref: $GITHUB_REF"
|
||||||
echo "GitHub event: $GITHUB_EVENT"
|
echo "GitHub event: $GITHUB_EVENT"
|
||||||
|
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
|
|
||||||
- name: Login to Azure - CI Subscription
|
- name: Login to Azure - CI Subscription
|
||||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||||
with:
|
with:
|
||||||
@@ -344,23 +349,23 @@ jobs:
|
|||||||
FILE: app_fdroid-keystore.jks
|
FILE: app_fdroid-keystore.jks
|
||||||
run: |
|
run: |
|
||||||
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME --name $FILE \
|
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME --name $FILE \
|
||||||
--file ${{ env._ANDROID_FOLDER_PATH_BASH }}/$FILE --output none
|
--file ${{ env.android_folder_path_bash }}/$FILE --output none
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- name: Increment version
|
- name: Increment version
|
||||||
run: |
|
run: |
|
||||||
BUILD_NUMBER=$((11000 + $GITHUB_RUN_NUMBER))
|
BUILD_NUMBER=$((3000 + $GITHUB_RUN_NUMBER))
|
||||||
echo "##### Setting F-Droid Version Code to $BUILD_NUMBER" | tee -a $GITHUB_STEP_SUMMARY
|
echo "##### Setting F-Droid Version Code to $BUILD_NUMBER" | tee -a $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
sed -i "s/android:versionCode=\"1\"/android:versionCode=\"$BUILD_NUMBER\"/" \
|
sed -i "s/android:versionCode=\"1\"/android:versionCode=\"$BUILD_NUMBER\"/" \
|
||||||
./${{ env._ANDROID_MANIFEST_PATH }}
|
./${{ env.android_manifest_path }}
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- name: Clean for F-Droid
|
- name: Clean for F-Droid
|
||||||
run: |
|
run: |
|
||||||
$directoryBuildProps = $($env:GITHUB_WORKSPACE + "/Directory.Build.props");
|
$directoryBuildProps = $($env:GITHUB_WORKSPACE + "/Directory.Build.props");
|
||||||
|
|
||||||
$androidManifest = $($env:GITHUB_WORKSPACE + "/${{ env._ANDROID_MANIFEST_PATH }}");
|
$androidManifest = $($env:GITHUB_WORKSPACE + "/${{ env.android_manifest_path }}");
|
||||||
|
|
||||||
Write-Output "##### Back up project files"
|
Write-Output "##### Back up project files"
|
||||||
|
|
||||||
@@ -393,7 +398,7 @@ jobs:
|
|||||||
|
|
||||||
Write-Output "##### Sign FDroid"
|
Write-Output "##### Sign FDroid"
|
||||||
|
|
||||||
$signingFdroidKeyStore = "$($env:GITHUB_WORKSPACE)\${{ env._ANDROID_FOLDER_PATH }}\app_fdroid-keystore.jks"
|
$signingFdroidKeyStore = "$($env:GITHUB_WORKSPACE)\${{ env.android_folder_path }}\app_fdroid-keystore.jks"
|
||||||
dotnet build $projToBuild -c Release -f ${{ env.target-net-version }}-android `
|
dotnet build $projToBuild -c Release -f ${{ env.target-net-version }}-android `
|
||||||
/p:AndroidKeyStore=true `
|
/p:AndroidKeyStore=true `
|
||||||
/p:AndroidSigningKeyStore=$signingFdroidKeyStore `
|
/p:AndroidSigningKeyStore=$signingFdroidKeyStore `
|
||||||
@@ -409,7 +414,7 @@ jobs:
|
|||||||
Copy-Item $signedApkPath $signedApkDestPath
|
Copy-Item $signedApkPath $signedApkDestPath
|
||||||
|
|
||||||
- name: Upload F-Droid .apk artifact
|
- name: Upload F-Droid .apk artifact
|
||||||
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
|
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.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
|
||||||
@@ -421,7 +426,7 @@ 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@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
|
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.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
|
||||||
@@ -433,19 +438,14 @@ jobs:
|
|||||||
runs-on: macos-14
|
runs-on: macos-14
|
||||||
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
|
app_ci_output_filename: App_x64_Debug
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
|
||||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- name: Set XCode version
|
- name: Set XCode version
|
||||||
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
|
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
|
||||||
with:
|
with:
|
||||||
xcode-version: 15.4
|
xcode-version: 15.1
|
||||||
|
|
||||||
- name: Setup NuGet
|
- name: Setup NuGet
|
||||||
uses: nuget/setup-nuget@a21f25cd3998bf370fde17e3f1b4c12c175172f9 # v2.0.0
|
uses: nuget/setup-nuget@a21f25cd3998bf370fde17e3f1b4c12c175172f9 # v2.0.0
|
||||||
@@ -453,12 +453,14 @@ jobs:
|
|||||||
nuget-version: 6.4.0
|
nuget-version: 6.4.0
|
||||||
|
|
||||||
- name: Set up .NET
|
- name: Set up .NET
|
||||||
uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4.0.1
|
uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4.0.0
|
||||||
with:
|
with:
|
||||||
dotnet-version: ${{ env.dotnet-version }}
|
dotnet-version: '8.0.x'
|
||||||
|
|
||||||
|
# This step might be obsolete at some point as .NET MAUI workloads
|
||||||
|
# are starting to come pre-installed on the GH Actions build agents.
|
||||||
- name: Install MAUI Workload
|
- name: Install MAUI Workload
|
||||||
run: dotnet workload install maui --version ${{ env.maui-workload-version }}
|
run: dotnet workload install maui --ignore-failed-sources
|
||||||
|
|
||||||
- name: Print environment
|
- name: Print environment
|
||||||
run: |
|
run: |
|
||||||
@@ -467,6 +469,11 @@ jobs:
|
|||||||
echo "GitHub ref: $GITHUB_REF"
|
echo "GitHub ref: $GITHUB_REF"
|
||||||
echo "GitHub event: $GITHUB_EVENT"
|
echo "GitHub event: $GITHUB_EVENT"
|
||||||
|
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
|
with:
|
||||||
|
submodules: 'true'
|
||||||
|
|
||||||
- name: Login to Azure - CI Subscription
|
- name: Login to Azure - CI Subscription
|
||||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||||
with:
|
with:
|
||||||
@@ -512,10 +519,10 @@ jobs:
|
|||||||
|
|
||||||
- name: Increment version
|
- name: Increment version
|
||||||
run: |
|
run: |
|
||||||
BUILD_NUMBER=$((8000 + $GITHUB_RUN_NUMBER))
|
BUILD_NUMBER=$((100 + $GITHUB_RUN_NUMBER))
|
||||||
echo "##### Setting iOS CFBundleVersion to $BUILD_NUMBER" | tee -a $GITHUB_STEP_SUMMARY
|
echo "##### Setting iOS CFBundleVersion to $BUILD_NUMBER" | tee -a $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
perl -0777 -pi.bak -e 's/<key>CFBundleVersion<\/key>\s*<string>1<\/string>/<key>CFBundleVersion<\/key>\n\t<string>'"$BUILD_NUMBER"'<\/string>/' ./${{ env._IOS_FOLDER_PATH }}/Info.plist
|
perl -0777 -pi.bak -e 's/<key>CFBundleVersion<\/key>\s*<string>1<\/string>/<key>CFBundleVersion<\/key>\n\t<string>'"$BUILD_NUMBER"'<\/string>/' ./${{ env.ios_folder_path }}/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.Extension/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.Extension/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.Autofill/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.Autofill/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
|
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
|
||||||
@@ -525,7 +532,7 @@ jobs:
|
|||||||
- name: Update Entitlements
|
- name: Update Entitlements
|
||||||
run: |
|
run: |
|
||||||
echo "##### Updating Entitlements"
|
echo "##### Updating Entitlements"
|
||||||
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
|
||||||
|
|
||||||
- name: Get certificates
|
- name: Get certificates
|
||||||
run: |
|
run: |
|
||||||
@@ -609,8 +616,8 @@ jobs:
|
|||||||
ARCHIVE_PATH: ./${{ env.main_app_folder_path }}/bin/Debug/${{ env.target-net-version }}-ios/iossimulator-x64
|
ARCHIVE_PATH: ./${{ env.main_app_folder_path }}/bin/Debug/${{ env.target-net-version }}-ios/iossimulator-x64
|
||||||
EXPORT_PATH: ./bitwarden-export
|
EXPORT_PATH: ./bitwarden-export
|
||||||
run: |
|
run: |
|
||||||
zip -r -q ${{ env._APP_CI_OUTPUT_FILENAME }}.app.zip $ARCHIVE_PATH
|
zip -r -q ${{ env.app_ci_output_filename }}.app.zip $ARCHIVE_PATH
|
||||||
mv ${{ env._APP_CI_OUTPUT_FILENAME }}.app.zip $EXPORT_PATH
|
mv ${{ env.app_ci_output_filename }}.app.zip $EXPORT_PATH
|
||||||
|
|
||||||
- name: Copy all dSYMs files to upload
|
- name: Copy all dSYMs files to upload
|
||||||
env:
|
env:
|
||||||
@@ -624,7 +631,7 @@ jobs:
|
|||||||
cp -r -v $WATCH_ARCHIVE_DSYMS_PATH $WATCH_DSYMS_EXPORT_PATH
|
cp -r -v $WATCH_ARCHIVE_DSYMS_PATH $WATCH_DSYMS_EXPORT_PATH
|
||||||
|
|
||||||
- name: Upload App Store .ipa & dSYMs artifacts
|
- name: Upload App Store .ipa & dSYMs artifacts
|
||||||
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
|
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
||||||
with:
|
with:
|
||||||
name: Bitwarden iOS
|
name: Bitwarden iOS
|
||||||
path: |
|
path: |
|
||||||
@@ -633,10 +640,10 @@ jobs:
|
|||||||
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@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
|
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
||||||
with:
|
with:
|
||||||
name: ${{ env._APP_CI_OUTPUT_FILENAME }}.app.zip
|
name: ${{ env.app_ci_output_filename }}.app.zip
|
||||||
path: ./bitwarden-export/${{ env._APP_CI_OUTPUT_FILENAME }}.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
|
||||||
@@ -670,27 +677,19 @@ jobs:
|
|||||||
echo "##### Uploading Watch dSYMs to Firebase"
|
echo "##### Uploading Watch dSYMs to Firebase"
|
||||||
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" \;
|
||||||
|
|
||||||
- name: Set up private auth key
|
|
||||||
run: |
|
|
||||||
mkdir ~/private_keys
|
|
||||||
cat << EOF > ~/private_keys/AuthKey_U362LJ87AA.p8
|
|
||||||
${{ secrets.APP_STORE_CONNECT_AUTH_KEY }}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
- name: Validate app in App Store
|
- name: Validate app in App Store
|
||||||
if: |
|
if: |
|
||||||
(github.ref == 'refs/heads/main'
|
(github.ref == 'refs/heads/master'
|
||||||
&& 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'
|
||||||
|
env:
|
||||||
|
APPLE_ID_USERNAME: ${{ secrets.APPLE_ID_USERNAME }}
|
||||||
|
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||||
run: |
|
run: |
|
||||||
xcrun altool \
|
xcrun altool --validate-app --type ios --file "./bitwarden-export/Bitwarden.ipa" \
|
||||||
--validate-app \
|
--username "$APPLE_ID_USERNAME" --password "$APPLE_ID_PASSWORD"
|
||||||
--type ios \
|
|
||||||
--file "./bitwarden-export/Bitwarden.ipa" \
|
|
||||||
--apiKey "U362LJ87AA" \
|
|
||||||
--apiIssuer ${{ secrets.APP_STORE_CONNECT_TEAM_ISSUER }}
|
|
||||||
|
|
||||||
- name: Deploy to App Store
|
- name: Deploy to App Store
|
||||||
if: |
|
if: |
|
||||||
@@ -699,13 +698,13 @@ jobs:
|
|||||||
&& 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'
|
||||||
|
env:
|
||||||
|
APPLE_ID_USERNAME: ${{ secrets.APPLE_ID_USERNAME }}
|
||||||
|
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||||
run: |
|
run: |
|
||||||
xcrun altool \
|
xcrun altool --upload-app --type ios --file "./bitwarden-export/Bitwarden.ipa" \
|
||||||
--upload-app \
|
--username "$APPLE_ID_USERNAME" --password "$APPLE_ID_PASSWORD"
|
||||||
--type ios \
|
|
||||||
--file "./bitwarden-export/Bitwarden.ipa" \
|
|
||||||
--apiKey "U362LJ87AA" \
|
|
||||||
--apiIssuer ${{ secrets.APP_STORE_CONNECT_TEAM_ISSUER }}
|
|
||||||
|
|
||||||
crowdin-push:
|
crowdin-push:
|
||||||
name: Crowdin Push
|
name: Crowdin Push
|
||||||
@@ -719,7 +718,7 @@ jobs:
|
|||||||
_CROWDIN_PROJECT_ID: "269690"
|
_CROWDIN_PROJECT_ID: "269690"
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
|
|
||||||
- name: Login to Azure - CI Subscription
|
- name: Login to Azure - CI Subscription
|
||||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||||
|
|||||||
3
.github/workflows/cleanup-rc-branch.yml
vendored
3
.github/workflows/cleanup-rc-branch.yml
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
name: Cleanup RC Branch
|
name: Cleanup RC Branch
|
||||||
|
|
||||||
on:
|
on:
|
||||||
@@ -23,7 +24,7 @@ jobs:
|
|||||||
secrets: "github-pat-bitwarden-devops-bot-repo-scope"
|
secrets: "github-pat-bitwarden-devops-bot-repo-scope"
|
||||||
|
|
||||||
- name: Checkout main
|
- name: Checkout main
|
||||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
with:
|
with:
|
||||||
ref: main
|
ref: main
|
||||||
token: ${{ steps.retrieve-bot-secrets.outputs.github-pat-bitwarden-devops-bot-repo-scope }}
|
token: ${{ steps.retrieve-bot-secrets.outputs.github-pat-bitwarden-devops-bot-repo-scope }}
|
||||||
|
|||||||
18
.github/workflows/crowdin-pull.yml
vendored
18
.github/workflows/crowdin-pull.yml
vendored
@@ -1,27 +1,21 @@
|
|||||||
|
---
|
||||||
name: Crowdin Sync
|
name: Crowdin Sync
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs: {}
|
inputs: {}
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 * * 5'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
crowdin-sync:
|
crowdin-sync:
|
||||||
name: Autosync
|
name: Autosync
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-22.04
|
||||||
env:
|
env:
|
||||||
_CROWDIN_PROJECT_ID: "269690"
|
_CROWDIN_PROJECT_ID: "269690"
|
||||||
steps:
|
steps:
|
||||||
- name: Generate GH App token
|
|
||||||
uses: actions/create-github-app-token@c1a285145b9d317df6ced56c09f525b5c2b6f755 # v1.11.1
|
|
||||||
id: app-token
|
|
||||||
with:
|
|
||||||
app-id: ${{ secrets.BW_GHAPP_ID }}
|
|
||||||
private-key: ${{ secrets.BW_GHAPP_KEY }}
|
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
with:
|
|
||||||
token: ${{ steps.app-token.outputs.token }}
|
|
||||||
|
|
||||||
- name: Login to Azure - CI Subscription
|
- name: Login to Azure - CI Subscription
|
||||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||||
@@ -38,7 +32,7 @@ jobs:
|
|||||||
- name: Download translations
|
- name: Download translations
|
||||||
uses: crowdin/github-action@61ac8b980551f674046220c3e104bddae2916ac5 # v2.0.0
|
uses: crowdin/github-action@61ac8b980551f674046220c3e104bddae2916ac5 # v2.0.0
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
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
|
||||||
|
|||||||
1
.github/workflows/enforce-labels.yml
vendored
1
.github/workflows/enforce-labels.yml
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
name: Enforce PR labels
|
name: Enforce PR labels
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
|||||||
4
.github/workflows/pr-labeler.yml
vendored
4
.github/workflows/pr-labeler.yml
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
name: "Pull Request Labeler"
|
name: "Pull Request Labeler"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
@@ -11,7 +12,6 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Label PR
|
- uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0
|
||||||
uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0
|
|
||||||
with:
|
with:
|
||||||
sync-labels: true
|
sync-labels: true
|
||||||
|
|||||||
37
.github/workflows/release.yml
vendored
37
.github/workflows/release.yml
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
name: Release
|
name: Release
|
||||||
run-name: Release ${{ inputs.release_type }}
|
run-name: Release ${{ inputs.release_type }}
|
||||||
|
|
||||||
@@ -37,7 +38,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
|
|
||||||
- name: Check Release Version
|
- name: Check Release Version
|
||||||
id: version
|
id: version
|
||||||
@@ -131,7 +132,7 @@ jobs:
|
|||||||
if: inputs.fdroid_publish
|
if: inputs.fdroid_publish
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
|
|
||||||
- name: Download F-Droid .apk artifact
|
- name: Download F-Droid .apk artifact
|
||||||
if: ${{ inputs.release_type != 'Dry Run' }}
|
if: ${{ inputs.release_type != 'Dry Run' }}
|
||||||
@@ -140,6 +141,7 @@ jobs:
|
|||||||
workflow: build.yml
|
workflow: build.yml
|
||||||
workflow_conclusion: success
|
workflow_conclusion: success
|
||||||
branch: ${{ needs.release.outputs.branch-name }}
|
branch: ${{ needs.release.outputs.branch-name }}
|
||||||
|
name: com.x8bit.bitwarden-fdroid.apk
|
||||||
|
|
||||||
- name: Dry Run - Download F-Droid .apk artifact
|
- name: Dry Run - Download F-Droid .apk artifact
|
||||||
if: ${{ inputs.release_type == 'Dry Run' }}
|
if: ${{ inputs.release_type == 'Dry Run' }}
|
||||||
@@ -148,9 +150,10 @@ jobs:
|
|||||||
workflow: build.yml
|
workflow: build.yml
|
||||||
workflow_conclusion: success
|
workflow_conclusion: success
|
||||||
branch: main
|
branch: main
|
||||||
|
name: com.x8bit.bitwarden-fdroid.apk
|
||||||
|
|
||||||
- name: Set up Node
|
- name: Set up Node
|
||||||
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
|
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
|
||||||
with:
|
with:
|
||||||
node-version: '16.x'
|
node-version: '16.x'
|
||||||
|
|
||||||
@@ -183,28 +186,6 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||||
|
|
||||||
- name: Retrieve secrets
|
|
||||||
id: retrieve-secrets
|
|
||||||
uses: bitwarden/gh-actions/get-keyvault-secrets@main
|
|
||||||
with:
|
|
||||||
keyvault: "bitwarden-ci"
|
|
||||||
secrets: "github-gpg-private-key,
|
|
||||||
github-gpg-private-key-passphrase,
|
|
||||||
github-pat-bitwarden-devops-bot-mobile-fdroid"
|
|
||||||
|
|
||||||
- name: Import GPG key
|
|
||||||
uses: crazy-max/ghaction-import-gpg@01dd5d3ca463c7f10f7f4f7b4f177225ac661ee4 # v6.1.0
|
|
||||||
with:
|
|
||||||
gpg_private_key: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key }}
|
|
||||||
passphrase: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key-passphrase }}
|
|
||||||
git_user_signingkey: true
|
|
||||||
git_commit_gpgsign: true
|
|
||||||
|
|
||||||
- name: Setup git
|
|
||||||
run: |
|
|
||||||
git config --local user.email "106330231+bitwarden-devops-bot@users.noreply.github.com"
|
|
||||||
git config --local user.name "bitwarden-devops-bot"
|
|
||||||
|
|
||||||
- name: Download secrets
|
- name: Download secrets
|
||||||
env:
|
env:
|
||||||
ACCOUNT_NAME: bitwardenci
|
ACCOUNT_NAME: bitwardenci
|
||||||
@@ -245,8 +226,4 @@ jobs:
|
|||||||
|
|
||||||
- name: Deploy to gh-pages
|
- name: Deploy to gh-pages
|
||||||
if: ${{ inputs.release_type != 'Dry Run' }}
|
if: ${{ inputs.release_type != 'Dry Run' }}
|
||||||
env:
|
run: npm run deploy
|
||||||
TOKEN: ${{ steps.retrieve-secrets.outputs.github-pat-bitwarden-devops-bot-mobile-fdroid }}
|
|
||||||
run: |
|
|
||||||
git remote set-url origin https://git:${TOKEN}@github.com/${GITHUB_REPOSITORY}.git
|
|
||||||
npm run deploy -- -u "bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>"
|
|
||||||
|
|||||||
1
.github/workflows/stale-bot.yml
vendored
1
.github/workflows/stale-bot.yml
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
name: 'Close stale issues and PRs'
|
name: 'Close stale issues and PRs'
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|||||||
1
.github/workflows/version-auto-bump.yml
vendored
1
.github/workflows/version-auto-bump.yml
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
name: Auto Bump Mobile Version
|
name: Auto Bump Mobile Version
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
|||||||
5
.github/workflows/version-bump.yml
vendored
5
.github/workflows/version-bump.yml
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
name: Version Bump
|
name: Version Bump
|
||||||
|
|
||||||
on:
|
on:
|
||||||
@@ -38,7 +39,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Checkout Branch
|
- name: Checkout Branch
|
||||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
with:
|
with:
|
||||||
ref: main
|
ref: main
|
||||||
|
|
||||||
@@ -283,7 +284,7 @@ jobs:
|
|||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Branch
|
- name: Checkout Branch
|
||||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
|
||||||
with:
|
with:
|
||||||
ref: main
|
ref: main
|
||||||
|
|
||||||
|
|||||||
16
.gitignore
vendored
16
.gitignore
vendored
@@ -296,11 +296,17 @@ iOSInjectionProject/
|
|||||||
timeline.xctimeline
|
timeline.xctimeline
|
||||||
playground.xcworkspace
|
playground.xcworkspace
|
||||||
|
|
||||||
# xcode / swift package manager - used by the MessagePack lib
|
# Swift Package Manager
|
||||||
/.build
|
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
|
||||||
/Packages
|
# Packages/
|
||||||
/*.xcodeproj
|
# Package.pins
|
||||||
.swiftpm
|
# Package.resolved
|
||||||
|
# *.xcodeproj
|
||||||
|
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
|
||||||
|
# hence it is not needed unless you have added a package configuration file to your project
|
||||||
|
# .swiftpm
|
||||||
|
|
||||||
|
.build/
|
||||||
|
|
||||||
# CocoaPods
|
# CocoaPods
|
||||||
# We recommend against adding the Pods directory to your .gitignore. However
|
# We recommend against adding the Pods directory to your .gitignore. However
|
||||||
|
|||||||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "lib/MessagePack"]
|
||||||
|
path = lib/MessagePack
|
||||||
|
url = https://github.com/bitwarden/MessagePack.git
|
||||||
@@ -4,8 +4,9 @@
|
|||||||
<ReleaseCodesignProvision>Automatic:AppStore</ReleaseCodesignProvision>
|
<ReleaseCodesignProvision>Automatic:AppStore</ReleaseCodesignProvision>
|
||||||
<ReleaseCodesignKey>iPhone Distribution</ReleaseCodesignKey>
|
<ReleaseCodesignKey>iPhone Distribution</ReleaseCodesignKey>
|
||||||
<IncludeBitwardeniOSExtensions>True</IncludeBitwardeniOSExtensions>
|
<IncludeBitwardeniOSExtensions>True</IncludeBitwardeniOSExtensions>
|
||||||
<IncludeBitwardenWatchOSApp>False</IncludeBitwardenWatchOSApp>
|
<IncludeBitwardenWatchOSApp>True</IncludeBitwardenWatchOSApp>
|
||||||
<Argon2IdLoadMtouchExtraArgs>-gcc_flags "-L$(ProjectDir)../../lib/ios -largon2 -force_load $(ProjectDir)../../lib/ios/libargon2.a"</Argon2IdLoadMtouchExtraArgs>
|
<Argon2IdLoadMtouchExtraArgs>-gcc_flags "-L$(ProjectDir)../../lib/ios -largon2 -force_load $(ProjectDir)../../lib/ios/libargon2.a"</Argon2IdLoadMtouchExtraArgs>
|
||||||
|
|
||||||
<!-- Uncomment this when Unit Testing-->
|
<!-- Uncomment this when Unit Testing-->
|
||||||
<!-- <CustomConstants>UT</CustomConstants> -->
|
<!-- <CustomConstants>UT</CustomConstants> -->
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,6 @@
|
|||||||
|
|
||||||
# Bitwarden Mobile Application
|
# Bitwarden Mobile Application
|
||||||
|
|
||||||
> [!TIP]
|
|
||||||
> Looking for the new native apps? Head on over to [bitwarden/android](https://github.com/bitwarden/android) and [bitwarden/ios](https://github.com/bitwarden/ios)
|
|
||||||
|
|
||||||
|
|
||||||
<a href="https://play.google.com/store/apps/details?id=com.x8bit.bitwarden" target="_blank"><img alt="Get it on Google Play" src="https://imgur.com/YQzmZi9.png" width="153" height="46"></a> <a href="https://mobileapp.bitwarden.com/fdroid/" target="_blank"><img alt="Get it on F-Droid" src="https://i.imgur.com/HDicnzz.png" width="154" height="46"></a> <a href="https://itunes.apple.com/us/app/bitwarden-free-password-manager/id1137397744?mt=8" target="_blank"><img src="https://imgur.com/GdGqPMY.png" width="135" height="40"></a>
|
<a href="https://play.google.com/store/apps/details?id=com.x8bit.bitwarden" target="_blank"><img alt="Get it on Google Play" src="https://imgur.com/YQzmZi9.png" width="153" height="46"></a> <a href="https://mobileapp.bitwarden.com/fdroid/" target="_blank"><img alt="Get it on F-Droid" src="https://i.imgur.com/HDicnzz.png" width="154" height="46"></a> <a href="https://itunes.apple.com/us/app/bitwarden-free-password-manager/id1137397744?mt=8" target="_blank"><img src="https://imgur.com/GdGqPMY.png" width="135" height="40"></a>
|
||||||
|
|
||||||
The Bitwarden mobile application is written in C# using .NET MAUI.
|
The Bitwarden mobile application is written in C# using .NET MAUI.
|
||||||
@@ -16,7 +12,7 @@ The Bitwarden mobile application is written in C# using .NET MAUI.
|
|||||||
|
|
||||||
# Build/Run
|
# Build/Run
|
||||||
|
|
||||||
Please refer to the [Legacy Contributing Documentation](https://github.com/bitwarden/mobile/tree/main/docs/) for build instructions, recommended tooling, code style tips, and lots of other great information to get you started.
|
Please refer to the [Mobile section](https://contributing.bitwarden.com/getting-started/mobile/) of the [Contributing Documentation](https://contributing.bitwarden.com/) for build instructions, recommended tooling, code style tips, and lots of other great information to get you started.
|
||||||
|
|
||||||
# We're Hiring!
|
# We're Hiring!
|
||||||
|
|
||||||
|
|||||||
@@ -1,79 +0,0 @@
|
|||||||
---
|
|
||||||
sidebar_position: 5
|
|
||||||
---
|
|
||||||
|
|
||||||
# .NET MAUI (legacy)
|
|
||||||
|
|
||||||
:::warning Legacy
|
|
||||||
|
|
||||||
This represents the **legacy** mobile app architecture done in .NET MAUI.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
The mobile .NET MAUI clients are Android and iOS applications with extensions and watchOS. They are
|
|
||||||
all located at https://github.com/bitwarden/mobile.
|
|
||||||
|
|
||||||
Principal structure is a follows:
|
|
||||||
|
|
||||||
- `App`: Main .NET MAUI project that shares code between both platforms (Android & iOS). One can see
|
|
||||||
specific platform code under the `Platforms` folder.
|
|
||||||
- `Core`: Shared code having both logical and UI parts of the app. Several classes are a port from
|
|
||||||
the Web Clients to C#. Here one can find most of the UI and logic since it's shared between App
|
|
||||||
and the iOS extensions.
|
|
||||||
- `iOS.Core`: Shared code used by the main iOS app and its extensions
|
|
||||||
- `iOS.Autofill`: iOS extension that handles Autofill
|
|
||||||
- `iOS.Extensions`: iOS extension that handles Autofill from the bottom sheet extension
|
|
||||||
- `iOS.ShareExtension`: iOS extension that handles sharing files through Send
|
|
||||||
- `watchOS`: All the code specific to the watchOS platform
|
|
||||||
- `bitwarden`: Stub iOS app so that the watchOS app has a companion app on Xcode
|
|
||||||
- `bitwarden WatchKit App`: Main Watch app where we set assets.
|
|
||||||
- `bitwarden WatchKit Extension`: All the logic and presentation logic for the Watch app is here
|
|
||||||
|
|
||||||
## Dependencies diagram
|
|
||||||
|
|
||||||
Below is a simplified dependencies diagram of the mobile repository.
|
|
||||||
|
|
||||||
```kroki type=plantuml
|
|
||||||
@startuml
|
|
||||||
skinparam BackgroundColor transparent
|
|
||||||
skinparam componentStyle rectangle
|
|
||||||
skinparam linetype ortho
|
|
||||||
|
|
||||||
title Simplified Dependencies Diagram
|
|
||||||
|
|
||||||
component "Core"
|
|
||||||
component "App"
|
|
||||||
component "iOS.Core"
|
|
||||||
component "iOS.Autofill"
|
|
||||||
component "iOS.Extension"
|
|
||||||
component "iOS.ShareExtension"
|
|
||||||
component "watchOS" {
|
|
||||||
component "bitwarden"
|
|
||||||
component "bitwarden WatchKit App"
|
|
||||||
component "bitwarden WatchKit Extension"
|
|
||||||
}
|
|
||||||
|
|
||||||
[App] --> [Core]
|
|
||||||
|
|
||||||
[iOS.Core] --> [App]
|
|
||||||
|
|
||||||
[App] --> [iOS.Core]
|
|
||||||
[App] --> [iOS.Autofill]
|
|
||||||
[App] --> [iOS.Extension]
|
|
||||||
[App] --> [iOS.ShareExtension]
|
|
||||||
[App] --> [bitwarden WatchKit App]
|
|
||||||
|
|
||||||
[iOS.Autofill] --> [Core]
|
|
||||||
[iOS.Autofill] --> [iOS.Core]
|
|
||||||
|
|
||||||
[iOS.Extension] --> [Core]
|
|
||||||
[iOS.Extension] --> [iOS.Core]
|
|
||||||
|
|
||||||
[iOS.ShareExtension] --> [Core]
|
|
||||||
[iOS.ShareExtension] --> [iOS.Core]
|
|
||||||
|
|
||||||
[bitwarden] --> [bitwarden WatchKit App]
|
|
||||||
[bitwarden WatchKit App] --> [bitwarden WatchKit Extension]
|
|
||||||
|
|
||||||
@enduml
|
|
||||||
```
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
sidebar_position: 1
|
|
||||||
---
|
|
||||||
|
|
||||||
# Overview
|
|
||||||
|
|
||||||
:::warning Legacy
|
|
||||||
|
|
||||||
This represents the **legacy** mobile app overview architecture done in .NET MAUI.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
The overall architecture of the mobile applications is pretty similar to the
|
|
||||||
[web clients](../../clients/overview.md) one following a layered architecture:
|
|
||||||
|
|
||||||
- State
|
|
||||||
- Services
|
|
||||||
- Presentation
|
|
||||||
|
|
||||||
Even though the State and Services layers are pretty similar to the web ones the Presentation layer
|
|
||||||
differs:
|
|
||||||
|
|
||||||
## Presentation
|
|
||||||
|
|
||||||
The presentation layer is implemented using .NET MAUI for the mobile apps, except for the watchOS
|
|
||||||
one which uses SwiftUI [see ADR](../../adr/0017-watchOS-use-swift.md)
|
|
||||||
@@ -1,186 +0,0 @@
|
|||||||
# watchOS
|
|
||||||
|
|
||||||
:::warning Legacy
|
|
||||||
|
|
||||||
This represents the **legacy** watchOS app architecture done in .NET MAUI.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Overall architecture
|
|
||||||
|
|
||||||
The watchOS application is organized as follows:
|
|
||||||
|
|
||||||
- `src/watchOS`: All the code specific to the watchOS platform
|
|
||||||
- `bitwarden`: Stub iOS app so that the watchOS app has a companion app on Xcode
|
|
||||||
- `bitwarden WatchKit App`: Main Watch app where we set assets.
|
|
||||||
- `bitwarden WatchKit Extension`: All the logic and presentation logic for the Watch app is here
|
|
||||||
|
|
||||||
So almost all the things related to the watch app will be in the **WatchKit Extension**, the
|
|
||||||
WatchKit App one will be only for assets and some configs.
|
|
||||||
|
|
||||||
Then in the Extension we have a layered architecture:
|
|
||||||
|
|
||||||
- State (it's a really simplified version of the iOS state)
|
|
||||||
- Persistence (here we use `CoreData` to interact with the Database)
|
|
||||||
- Services (totp generation, crypto services and business logic)
|
|
||||||
- Presentation (use `SwiftUI` for the UI with an MVVM pattern)
|
|
||||||
|
|
||||||
## Integration with iOS
|
|
||||||
|
|
||||||
The watchOS app is developed using `Xcode` and `Swift` and we need to integrate it to the .NET MAUI
|
|
||||||
iOS application.
|
|
||||||
|
|
||||||
For this, the `iOS.csproj` has been adapted taking a
|
|
||||||
[solution](https://github.com/xamarin/xamarin-macios/issues/10070#issuecomment-1033428823) provided
|
|
||||||
in the `Xamarin.Forms` GitHub repository and modified to our needs:
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<PropertyGroup>
|
|
||||||
<WatchAppBuildPath Condition=" '$(Configuration)' == 'Debug' ">$(Home)/Library/Developer/Xcode/DerivedData/bitwarden-cbtqsueryycvflfzbsoteofskiyr/Build/Products</WatchAppBuildPath>
|
|
||||||
<WatchAppBuildPath Condition=" '$(Configuration)' != 'Debug' ">$([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..'))/watchOS/bitwarden.xcarchive/Products/Applications/bitwarden.app/Watch</WatchAppBuildPath>
|
|
||||||
<WatchAppBundle>Bitwarden.app</WatchAppBundle>
|
|
||||||
<WatchAppConfiguration Condition=" '$(Platform)' == 'iPhoneSimulator' ">watchsimulator</WatchAppConfiguration>
|
|
||||||
<WatchAppConfiguration Condition=" '$(Platform)' == 'iPhone' ">watchos</WatchAppConfiguration>
|
|
||||||
<WatchAppBundleFullPath Condition=" '$(Configuration)' == 'Debug' ">$(WatchAppBuildPath)/$(Configuration)-$(WatchAppConfiguration)/$(WatchAppBundle)</WatchAppBundleFullPath>
|
|
||||||
<WatchAppBundleFullPath Condition=" '$(Configuration)' != 'Debug' ">$(WatchAppBuildPath)/$(WatchAppBundle)</WatchAppBundleFullPath>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
...
|
|
||||||
|
|
||||||
<ItemGroup Condition=" '$(Configuration)' == 'Debug' AND Exists('$(WatchAppBundleFullPath)') ">
|
|
||||||
<_ResolvedWatchAppReferences Include="$(WatchAppBundleFullPath)" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup Condition=" '$(Configuration)' != 'Debug' ">
|
|
||||||
<_ResolvedWatchAppReferences Include="$(WatchAppBundleFullPath)" />
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Condition=" '$(_ResolvedWatchAppReferences)' != '' ">
|
|
||||||
<CodesignExtraArgs>--deep</CodesignExtraArgs>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Target Name="PrintWatchAppBundleStatus" BeforeTargets="Build">
|
|
||||||
<Message Text="WatchAppBundleFullPath: '$(WatchAppBundleFullPath)' exists" Condition=" Exists('$(WatchAppBundleFullPath)') " />
|
|
||||||
<Message Text="WatchAppBundleFullPath: '$(WatchAppBundleFullPath)' does NOT exist" Condition=" !Exists('$(WatchAppBundleFullPath)') " />
|
|
||||||
</Target>
|
|
||||||
```
|
|
||||||
|
|
||||||
So on the `PropertyGroup` the `WatchAppBundleFullPath` is assembled together depending on the
|
|
||||||
Configuration and the Platform taking the output of the Xcode watchOS app build. Then there are some
|
|
||||||
`ItemGroup` to include the watch app depending on if it exists and the Configuration. The task
|
|
||||||
`_ResolvedWatchAppReferences` is the one responsible to peek into the `Bitwarden.app` built by Xcode
|
|
||||||
and if it finds a Watch app, it will just bundle it to the Xamarin iOS application. Finally, if the
|
|
||||||
Watch app is bundled, deep signing is enabled and the build path is printed.
|
|
||||||
|
|
||||||
:::caution
|
|
||||||
|
|
||||||
As one can see in the csproj, to bundle the watchOS app into the iOS app one needs to target the
|
|
||||||
correct platform. So if one is going to use a device, target the device on Xcode to build the
|
|
||||||
watchOS app and after the build is done one can go to VS4M to build the iOS app (which will bundle
|
|
||||||
the watchOS one) and run it on the device.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Synchronization between iPhone and Watch
|
|
||||||
|
|
||||||
In order to sync data between the iPhone and the Watch apps the
|
|
||||||
[Watch Connectivity Framework](https://developer.apple.com/documentation/watchconnectivity) is used.
|
|
||||||
|
|
||||||
So there is a Watch Connectivity Manager on each side that is the interface used for the services on
|
|
||||||
each platform to communicate.
|
|
||||||
|
|
||||||
For the sync communication, mainly
|
|
||||||
[updateApplicationContext](https://developer.apple.com/documentation/watchconnectivity/wcsession/1615621-updateapplicationcontext)
|
|
||||||
is used given that it always have the latest data sent available, it's sent in the background and
|
|
||||||
the counterpart device doesn't necessarily needs to be in range (so it's cached until it can be
|
|
||||||
delivered). Additionally,
|
|
||||||
[sendMessage](https://developer.apple.com/documentation/watchconnectivity/wcsession/1615687-sendmessage)
|
|
||||||
is also used to signal the counterpart of some action to take quickly (like triggering a sync from
|
|
||||||
the Watch).
|
|
||||||
|
|
||||||
The `WatchDTO` is the object that is sent in the synchronization that has all the information for
|
|
||||||
the Watch.
|
|
||||||
|
|
||||||
```kroki type=plantuml
|
|
||||||
title= iOS part
|
|
||||||
@startuml
|
|
||||||
|
|
||||||
title iOS
|
|
||||||
|
|
||||||
participant C as "Caller"
|
|
||||||
participant BWDS as "BaseWatchDeviceService"
|
|
||||||
participant WDS as "WatchDeviceService"
|
|
||||||
participant WCSM as "WCSessionManager"
|
|
||||||
boundary WCF as "Watch Connectivity Framework"
|
|
||||||
|
|
||||||
group Sync
|
|
||||||
C->>BWDS: SyncDataToWatchAsync(...)
|
|
||||||
BWDS->BWDS: GetStateAsync(...)
|
|
||||||
BWDS->>WDS: SendDataToWatchAsync(...)
|
|
||||||
WDS->>WCSM: SendBackgroundHighPriorityMessage(...)
|
|
||||||
WCSM->>WCF: UpdateApplicationContext(...)
|
|
||||||
end
|
|
||||||
@enduml
|
|
||||||
```
|
|
||||||
|
|
||||||
```kroki type=plantuml
|
|
||||||
title= iOS part
|
|
||||||
@startuml
|
|
||||||
|
|
||||||
title watchOS
|
|
||||||
|
|
||||||
boundary WCF as "Watch Connectivity Framework"
|
|
||||||
participant WCM as "WatchConnectivityManager"
|
|
||||||
participant SS as "StateService"
|
|
||||||
participant ES as "EnvironmentService"
|
|
||||||
participant CS as "CipherService"
|
|
||||||
participant WCS as "watchConnectivitySubject"
|
|
||||||
|
|
||||||
group Sync
|
|
||||||
WCF->>WCM: didReceiveApplicationContext(...)
|
|
||||||
WCM->>SS: update state
|
|
||||||
WCM->>ES: update environment
|
|
||||||
WCM->>CS: saveCiphers(...)
|
|
||||||
WCM->>WCS: fire notification change to subscribers
|
|
||||||
end
|
|
||||||
@enduml
|
|
||||||
```
|
|
||||||
|
|
||||||
## States
|
|
||||||
|
|
||||||
The next ones are the states in which the Watch application can be at a given time:
|
|
||||||
|
|
||||||
- **Valid:** Everything it's ok and the user can see the vault ciphers with TOTP
|
|
||||||
- **Need Login:** The user needs to log in using the iPhone
|
|
||||||
- **Need Setup:** The user needs to set up an account with "Connect to Watch" enabled on their
|
|
||||||
iPhone
|
|
||||||
- **Need Premium:** The current account is not a premium account
|
|
||||||
- **Need 2FA item:** The current account doesn't have any cipher with TOTP set up
|
|
||||||
- **Syncing:** Displayed when changing accounts and syncing the new vault TOTPs
|
|
||||||
- **Need Device Owner Auth:** The user needs to set up an Apple Watch Passcode in order to use the
|
|
||||||
app
|
|
||||||
|
|
||||||
## Persistence and encryption
|
|
||||||
|
|
||||||
On the Watch [CoreData](https://developer.apple.com/documentation/coredata) is used as persistence
|
|
||||||
for the ciphers. So in order to encrypt the data in them a Value Transformer in each encrypted
|
|
||||||
attribute is used: `StringEncryptionTransformer`.
|
|
||||||
|
|
||||||
Inside the transformer a call to the `CryptoService` is used that ends up using
|
|
||||||
[AES.GCM](https://developer.apple.com/documentation/cryptokit/aes/gcm) to encrypt the data with a
|
|
||||||
256 bits [SymmetricKey](https://developer.apple.com/documentation/cryptokit/symmetrickey). The key
|
|
||||||
is generated/loaded the first time something needs to be encrypted and stored in the device
|
|
||||||
Keychain.
|
|
||||||
|
|
||||||
## Crash reporting
|
|
||||||
|
|
||||||
On all the other mobile applications, [AppCenter](https://appcenter.ms/) is being used as Crash
|
|
||||||
reporting tool. However, it doesn't have support for watchOS (nor its internal library to handle
|
|
||||||
crashes).
|
|
||||||
|
|
||||||
So, on the watchOS app [Firebase Crashlytics](https://firebase.google.com/docs/crashlytics) is used
|
|
||||||
with basic crash reporting enabled (there is no handled error logging here yet). For this to work a
|
|
||||||
`GoogleService-Info.plist` file is needed which is injected on the CI.
|
|
||||||
|
|
||||||
At the moment of writing this document, no plist is configured for dev environment so `Crashlytics`
|
|
||||||
is enabled on **non-DEBUG** configurations.
|
|
||||||
|
|
||||||
There is a `Log` class to log errors happened in the app, but it's only enabled in **DEBUG**
|
|
||||||
configuration.
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 350 KiB |
@@ -1,177 +0,0 @@
|
|||||||
# Android
|
|
||||||
|
|
||||||
:::warning Legacy
|
|
||||||
|
|
||||||
Getting started the **legacy** Android app done in .NET MAUI.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Requirements
|
|
||||||
|
|
||||||
Before you start, you should have the recommended [Tools and Libraries](../../../tools/index.md)
|
|
||||||
installed. You will also need to install:
|
|
||||||
|
|
||||||
1. Visual Studio 2022 / VS Code
|
|
||||||
2. [.NET 8 (latest)](https://dotnet.microsoft.com/en-us/download/dotnet/8.0)
|
|
||||||
- Note: Even if you have an ARM64 based Mac (M1, M2, M3, etc.), you can install all x64 SDKs to
|
|
||||||
run Android
|
|
||||||
- On Visual Studio for Mac you may need to turn on the feature for .NET 8 by going to Visual
|
|
||||||
Studio > Preferences > Preview Features > Use the .NET 8 SDK
|
|
||||||
3. .NET MAUI Workload
|
|
||||||
- You can install this by running `dotnet workload install maui`
|
|
||||||
4. Android SDK 34
|
|
||||||
- You can use the SDK manager in [Visual Studio][xamarin-vs], or [Android
|
|
||||||
Studio][android-studio] to install this
|
|
||||||
|
|
||||||
To make sure you have the Android SDK and Emulator installed:
|
|
||||||
|
|
||||||
1. Open Visual Studio
|
|
||||||
2. Click Tools > SDK Manager (under the Android subheading)
|
|
||||||
3. Click the Tools tab
|
|
||||||
4. Make sure the following items are installed:
|
|
||||||
|
|
||||||
- Android SDK tools (at least one version of the command-line tools)
|
|
||||||
- Android SDK Platform-Tools
|
|
||||||
- Android SDK Build Tools (at least one version)
|
|
||||||
- Android Emulator
|
|
||||||
|
|
||||||
5. Click Apply Changes if you've marked anything for installation
|
|
||||||
|
|
||||||
If you've missed anything, Visual Studio should prompt you anyway.
|
|
||||||
|
|
||||||
## Android Development Setup
|
|
||||||
|
|
||||||
To set up a new virtual Android device for debugging:
|
|
||||||
|
|
||||||
1. Click Tools > Device Manager (under the Android subheading)
|
|
||||||
2. Click New Device
|
|
||||||
3. Set up the device you want to emulate - you can just choose the Base Device and leave the
|
|
||||||
default settings if you're unsure
|
|
||||||
4. Visual Studio will then download the image for that device. The download progress is shown in
|
|
||||||
the progress in the Android Device Manager dialog.
|
|
||||||
5. Once this has completed, the emulated Android device will be available as a build target under
|
|
||||||
App > Debug > (name of device)
|
|
||||||
|
|
||||||
### ARM64 Macs
|
|
||||||
|
|
||||||
1. Install and open Android Studio
|
|
||||||
2. In the top navbar, click on Android Studio > Settings > Appearance & Behavior (tab) > System
|
|
||||||
Settings > Android SDK
|
|
||||||
3. In the SDK Platforms tab, ensure the "Show Package Details" checkbox is checked (located in the
|
|
||||||
bottom-right)
|
|
||||||
4. Bellow each Android API you'll see several System Images, pick one of the `ARM 64 v8a` and wait
|
|
||||||
for it to download
|
|
||||||
5. Go to View > Tool Windows > Device Manager
|
|
||||||
6. Inside Device Manager, create a device using the previously downloaded system image
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## F-Droid
|
|
||||||
|
|
||||||
On `App.csproj` and `Core.csproj` we can now pass `/p:CustomConstants=FDROID` when
|
|
||||||
building/releasing so that the `FDROID` constant is added to the defined ones at the project level
|
|
||||||
and we can use that with precompiler directives, e.g.:
|
|
||||||
|
|
||||||
```c#
|
|
||||||
#if FDROID
|
|
||||||
// perform operation only for FDROID.
|
|
||||||
#endif
|
|
||||||
```
|
|
||||||
|
|
||||||
## Building
|
|
||||||
|
|
||||||
There are currently a few problems on Visual Studio for Mac for building correctly the projects, so
|
|
||||||
if you encounter some errors build using the CLI (previously removing bin/obj folders):
|
|
||||||
|
|
||||||
```
|
|
||||||
dotnet build -f net8.0-android -c Debug
|
|
||||||
```
|
|
||||||
|
|
||||||
## Testing and Debugging
|
|
||||||
|
|
||||||
### Using the Android Emulator
|
|
||||||
|
|
||||||
In order to access `localhost:<port>` resources in the Android Emulator when debugging using Visual
|
|
||||||
Studio on your Mac natively, you'll need to configure the endpoint addresses using
|
|
||||||
`<http://10.0.2.2:<port>`\> in order to access `localhost`, which maps the Android proxy by design.
|
|
||||||
|
|
||||||
[xamarin-vs]: https://learn.microsoft.com/en-us/xamarin/android/get-started/installation/android-sdk
|
|
||||||
[android-studio]: https://developer.android.com/studio/releases/platforms
|
|
||||||
|
|
||||||
### Using Server Tunneling
|
|
||||||
|
|
||||||
Instead of configuring your device or emulator, you can instead use a
|
|
||||||
[proxy tunnel to your local server](../../../server/tunnel.md) and have your app connect to it
|
|
||||||
directly.
|
|
||||||
|
|
||||||
### Push Notifications
|
|
||||||
|
|
||||||
The default configuration for the Android app is to register itself to the same environment as
|
|
||||||
Bitwarden's QA Cloud. This means that if you try to debug the app using the production endpoints you
|
|
||||||
won't be able to receive Live Sync updates or Passwordless login requests.
|
|
||||||
|
|
||||||
<Bitwarden>
|
|
||||||
|
|
||||||
So, in order to receive notifications while debugging, you have two options:
|
|
||||||
|
|
||||||
- Use QA Cloud endpoints for the Api and Identity, or
|
|
||||||
- Use a local server setup where the Api is connected to QA Azure Notification Hub
|
|
||||||
|
|
||||||
</Bitwarden>
|
|
||||||
|
|
||||||
### Testing Passwordless Locally
|
|
||||||
|
|
||||||
Before you can start testing and debugging passwordless logins, make sure your local server setup is
|
|
||||||
running correctly ([server setup](../../../server/guide.md)). You should also be able to deploy your
|
|
||||||
Android app to your device or emulator.
|
|
||||||
|
|
||||||
:::note
|
|
||||||
|
|
||||||
Debugging and testing passwordless authentication is limited by
|
|
||||||
[push notifications](#push-notifications).
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
Testing passwordless notifications:
|
|
||||||
|
|
||||||
1. Start your local server (`Api`, `Identity`, `Notifications`)
|
|
||||||
2. Make sure your mobile device can [connect to your local server](#using-server-tunneling)
|
|
||||||
3. [Start the web client](../../../clients/web-vault/index.mdx), as you will need it to make login
|
|
||||||
requests
|
|
||||||
4. Deploy the Android app to your device or emulator
|
|
||||||
5. After deployment, open the app, login to your QA account and activate passwordless login requests
|
|
||||||
in settings
|
|
||||||
6. Open the web vault using your preferred browser (ex: http://localhost:8080)
|
|
||||||
7. Enter the email address of an account that has previously authenticated on that device (i.e. is a
|
|
||||||
"known device") and click Continue. When presented with the login options, click click Login with
|
|
||||||
Device.
|
|
||||||
8. Check mobile device for the notification
|
|
||||||
|
|
||||||
<Bitwarden>
|
|
||||||
|
|
||||||
## AndroidX Credentials
|
|
||||||
|
|
||||||
Currently, the
|
|
||||||
[androidx.credentials](https://developer.android.com/jetpack/androidx/releases/credentials) official
|
|
||||||
binding has some bugs and we cannot use it yet. Because of this, we made a binding ourselves which
|
|
||||||
is located in here:
|
|
||||||
[Xamarin.AndroidX.Credentials](https://github.com/bitwarden/xamarin.androidx.credentials).
|
|
||||||
|
|
||||||
As of today, we are using version 1.2.0.
|
|
||||||
|
|
||||||
In the projects, the package is added as a local NuGet package located in
|
|
||||||
`lib/android/Xamarin.AndroidX.Credentials` and this source is already configured in the
|
|
||||||
`nuget.config` file.
|
|
||||||
|
|
||||||
In the case a change is needed on the binding, create a new local NuGet package and replace it in
|
|
||||||
the aforementioned source.
|
|
||||||
|
|
||||||
:::warning
|
|
||||||
|
|
||||||
Do not add the project to the solution and as a project reference to the `App.csproj` /
|
|
||||||
`Core.csproj` this will strangely make the iOS app crash on start because of solution configuration.
|
|
||||||
Even though we couldn't find the root cause, this is the effect caused by this action.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
</Bitwarden>
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
---
|
|
||||||
sidebar_position: 4
|
|
||||||
---
|
|
||||||
|
|
||||||
# .NET MAUI (legacy)
|
|
||||||
|
|
||||||
:::warning Legacy
|
|
||||||
|
|
||||||
Getting started the **legacy** mobile app done in .NET MAUI.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Configure Git blame
|
|
||||||
|
|
||||||
We recommend that you configure git to ignore the Prettier revision:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git config blame.ignoreRevsFile .git-blame-ignore-revs
|
|
||||||
```
|
|
||||||
|
|
||||||
## Android Development
|
|
||||||
|
|
||||||
See the [Android Mobile app](./android/index.md) page to set up an Android development environment.
|
|
||||||
|
|
||||||
## iOS Development
|
|
||||||
|
|
||||||
<Bitwarden>
|
|
||||||
|
|
||||||
See the [iOS Mobile app](./ios/index.mdx) page to set up an iOS development environment.
|
|
||||||
|
|
||||||
</Bitwarden>
|
|
||||||
|
|
||||||
<Community>
|
|
||||||
|
|
||||||
Unfortunately, iOS development requires provisioning profiles and other capabilities only available
|
|
||||||
to internal team members. We do not have any documentation for community developers at this time.
|
|
||||||
|
|
||||||
</Community>
|
|
||||||
|
|
||||||
## watchOS Development
|
|
||||||
|
|
||||||
<Bitwarden>
|
|
||||||
|
|
||||||
See the [watchOS app](./watchos) page to set up an watchOS development environment.
|
|
||||||
|
|
||||||
</Bitwarden>
|
|
||||||
|
|
||||||
<Community>
|
|
||||||
|
|
||||||
Unfortunately, watchOS development requires provisioning profiles and other capabilities only
|
|
||||||
available to internal team members. We do not have any documentation for community developers at
|
|
||||||
this time.
|
|
||||||
|
|
||||||
</Community>
|
|
||||||
|
|
||||||
## Unit tests
|
|
||||||
|
|
||||||
:::info TL;DR;
|
|
||||||
|
|
||||||
In order to run unit tests add the argument `/p:CustomConstants=UT` on the `dotnet` command for
|
|
||||||
building/running. To work on Unit testing or use a Test runner uncomment the `CustomConstants` line
|
|
||||||
on the `Directory.Build.props`
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
Given that the `Core.csproj` is a MAUI project with `net8.0-android;net8.0-ios` target frameworks
|
|
||||||
and we need `net8.0` for the tests we need a way to add that. The `Core.Test.csproj` has `net8.0` as
|
|
||||||
a target so by adding the the argument `/p:CustomConstants=UT` we add `UT` as a constant to use in
|
|
||||||
the projects. With that in place the next things happen:
|
|
||||||
|
|
||||||
- `UT` is added as a constant to use by precompiler directives
|
|
||||||
- `Core.csproj` is changed to add `net8.0` as a target framework for unit tests
|
|
||||||
- `FFImageLoading` is removed as a reference given that it doesn't support `net8.0`. Because of
|
|
||||||
this, now we have a wrapped `CachedImage` that uses the library one if it's not `UT` and a custom
|
|
||||||
one with NOOP implementation for `UT`
|
|
||||||
|
|
||||||
So if one wants to build the test project, one needs to go to `test/Core.Test` and run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
dotnet build -f net8.0 /p:CustomConstants=UT
|
|
||||||
```
|
|
||||||
|
|
||||||
and to run the tests go to the same folder and run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
dotnet test -f net8.0 /p:CustomConstants=UT
|
|
||||||
```
|
|
||||||
|
|
||||||
Finally, when working on the `Core.Test` project or when wanting to use a Test runner, go to the
|
|
||||||
`Directory.Build.props` (located in the root) and uncomment the line referencing `CustomConstants`
|
|
||||||
so that everything is loaded accordingly in the project. Because of some issues, the referenced
|
|
||||||
projects, e.g. `Core`, are only included when the `UT` constant is in place. By uncommenting this
|
|
||||||
line the projects will be referenced and one can work on that project or run the tests from a Test
|
|
||||||
runner.
|
|
||||||
|
|
||||||
## Custom constants
|
|
||||||
|
|
||||||
There are custom constants to be used by the parameter `/p:CustomConstants={Value}` when
|
|
||||||
building/running/releasing:
|
|
||||||
|
|
||||||
- `FDROID`: This is used to indicate that it's and F-Droid build/release
|
|
||||||
([want to know more?](./android/index.md#f-droid))
|
|
||||||
- `UT`: This is used when building/running the test projects or when working on one of them
|
|
||||||
([want to know more?](#unit-tests))
|
|
||||||
|
|
||||||
These constants are added to the defined ones, so anyone can use them in the code with precompiler
|
|
||||||
directives.
|
|
||||||
@@ -1,440 +0,0 @@
|
|||||||
---
|
|
||||||
sidebar_custom_props:
|
|
||||||
access: bitwarden
|
|
||||||
---
|
|
||||||
|
|
||||||
import Tabs from "@theme/Tabs";
|
|
||||||
import TabItem from "@theme/TabItem";
|
|
||||||
|
|
||||||
# iOS
|
|
||||||
|
|
||||||
:::warning Legacy
|
|
||||||
|
|
||||||
Getting started the **legacy** iOS app done in .NET MAUI.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Requirements
|
|
||||||
|
|
||||||
1. Visual Studio 2022 / VS Code
|
|
||||||
2. [.NET 8 (latest)](https://dotnet.microsoft.com/en-us/download/dotnet/8.0)
|
|
||||||
- On Visual Studio for Mac you may need to turn on the feature for .NET 8 by going to Visual
|
|
||||||
Studio > Preferences > Preview Features > Use the .NET 8 SDK
|
|
||||||
3. .NET MAUI Workload
|
|
||||||
- You can install this by running `dotnet workload install maui`
|
|
||||||
4. A Mac with Xcode 15.0 installed
|
|
||||||
|
|
||||||
## Apple Developer Account Setup
|
|
||||||
|
|
||||||
1. Accept your invite to the Bitwarden Apple Developer team. You should get a request in your email
|
|
||||||
with the subject "You're invited to join a development team." Click the link, "Accept Invitation"
|
|
||||||
and you'll be prompted to create an Apple ID for your Bitwarden email address. If you didn't
|
|
||||||
receive this email, contact the IT department (@IT in slack). Accept the terms and conditions and
|
|
||||||
complete the sign up flow
|
|
||||||
|
|
||||||
2. Go to [Apple ID Online](https://appleid.apple.com/) and log in with your new Apple ID. Set up
|
|
||||||
2-factor authentication (using mobile phone and/or trusted device) - this is critical because
|
|
||||||
Apple no longer allows "developer" accounts without MFA, but it won't tell you that when your
|
|
||||||
build fails locally
|
|
||||||
|
|
||||||
3. Go to [App Store Connect](https://appstoreconnect.apple.com/) and accept the terms and conditions
|
|
||||||
|
|
||||||
4. Ensure you have access to the Bitwarden team and team app profiles
|
|
||||||
|
|
||||||
5. Go to [Apple Developer Account](https://developer.apple.com/account/) and go to the
|
|
||||||
"Certificates, IDs & Profiles" menu item. Check that you can see the 8bit Solutions LLC
|
|
||||||
Certificates in the Certificates section, and the Bitwarden profiles in the Profiles section. If
|
|
||||||
any of this is missing, ask the IT department (@IT #tech-support in slack) for the additional
|
|
||||||
roles / permissions
|
|
||||||
|
|
||||||
## macOS Setup
|
|
||||||
|
|
||||||
Next, you need to get your Mac environment set up for building and running the Bitwarden iOS mobile
|
|
||||||
project. This requires creating the necessary developer provisioning profiles for code signing and
|
|
||||||
execution on your Mac through Xcode. Visual Studio has a simple process to get all of the
|
|
||||||
provisioning profiles, however this is prone to fail without much feedback. Try the Visual Studio
|
|
||||||
instructions ("The Easy Way") first, and fallback to the Xcode instructions (“The Hard Way”) if
|
|
||||||
required.
|
|
||||||
|
|
||||||
### Visual Studio: The Easy Way
|
|
||||||
|
|
||||||
1. Open Visual Studio for Mac
|
|
||||||
|
|
||||||
2. Go to Preferences > Publishing > Apple Developer Accounts
|
|
||||||
|
|
||||||
3. Click “Add”, choose "Enterprise Account", and sign in with your previously configured Apple
|
|
||||||
Developer account
|
|
||||||
|
|
||||||
:::note
|
|
||||||
|
|
||||||
If you receive a "Failed to synchronize with Apple Developer Portal" error, you’re missing
|
|
||||||
additional roles / permissions.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
After signing in successfully, you should see your account in the list and “Bitwarden Inc” in
|
|
||||||
the account teams list
|
|
||||||
|
|
||||||
4. Click “View Details…”
|
|
||||||
|
|
||||||
5. If you don’t have a valid Apple Development certificate, click Create certificate > Apple
|
|
||||||
Development
|
|
||||||
|
|
||||||
6. Click “Download All Profiles”
|
|
||||||
|
|
||||||
7. You should now be able to run the app by setting
|
|
||||||
`iOS > Debug | iPhone Simulator > [pick any iOS Simulator]` in the top left corner and pressing
|
|
||||||
Play
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
If this worked, you can skip the next section.
|
|
||||||
|
|
||||||
If you only have the option "Generic Simulator", with a message to lower the 'Deployment Target',
|
|
||||||
your version of MAUI may not yet support the version of Xcode that you are using (as discussed
|
|
||||||
[here](https://github.com/xamarin/xamarin-macios/issues/15954#issuecomment-1246025735)).
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
To work around this issue, try [downloading](https://developer.apple.com/download/all/) and
|
|
||||||
installing an older version of Xcode from Apple (you can look for guidance on which Xcode version to
|
|
||||||
use from the Xamarin.iOS [release notes](https://github.com/xamarin/xamarin-macios/releases) (this
|
|
||||||
applies to MAUI as well). After installing the new version of Xcode, restart Visual Studio and load
|
|
||||||
your project to verify your available simulator options.
|
|
||||||
|
|
||||||
:::note
|
|
||||||
|
|
||||||
If you need multiple versions of Xcode installed on your development machine, you can rename the
|
|
||||||
`Xcode.app` file extracted from your download to something else (e.g. "Xcode_14_2.app") before
|
|
||||||
placing it in your Applications folder. You can then switch between Xcode versions by using
|
|
||||||
`xcode-select` from the command line. e.g.:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
sudo xcode-select -s /Applications/Xcode_14_2.app
|
|
||||||
```
|
|
||||||
|
|
||||||
You may achieve similar results with tooling such as
|
|
||||||
[Xcodes.app](https://github.com/XcodesOrg/XcodesApp)
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
### Xcode: The Hard Way
|
|
||||||
|
|
||||||
:::note
|
|
||||||
|
|
||||||
If you're the next person to follow these instructions, please commit and upload the Xcode project
|
|
||||||
files you create so we can streamline this process.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
Only try these instructions if the Visual Studio instructions above didn't work for you.
|
|
||||||
|
|
||||||
1. Open Xcode
|
|
||||||
|
|
||||||
2. Accept any defaults, ensure any extensions/add-ons have been installed, etc.
|
|
||||||
|
|
||||||
3. Create new project... > iOS > App
|
|
||||||
|
|
||||||
4. Use the following options for your new project:
|
|
||||||
|
|
||||||
- Product Name: "bitwarden"
|
|
||||||
|
|
||||||
- Team: Bitwarden Inc (if this is missing, double check your Apple Developer Account setup
|
|
||||||
above)
|
|
||||||
|
|
||||||
- Organization Identifier: "com.8bit"
|
|
||||||
|
|
||||||
- Bundle Identifier (automatically generated): "com.8bit.bitwarden"
|
|
||||||
|
|
||||||
- Language: Objective-C
|
|
||||||
|
|
||||||
- User Interface: Storyboard
|
|
||||||
|
|
||||||
- Leave all other checkboxes unchecked (or uncheck them)
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
5. Click Next, save to the default location and then click "Create"
|
|
||||||
|
|
||||||
6. On the project configuration page, click the "Signing & Capabilities" tab
|
|
||||||
|
|
||||||
7. Make sure you have the following defaults:
|
|
||||||
|
|
||||||
- Automatically manage signing: (checked)
|
|
||||||
|
|
||||||
- Team: Bitwarden Inc
|
|
||||||
|
|
||||||
- Provisioning Profile: Xcode Managed Profile
|
|
||||||
|
|
||||||
- Signing Certificate: your Apple ID/Name
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
8. From the menu bar, click Product > Build
|
|
||||||
|
|
||||||
9. Repeat Steps 3-8, with the following changes in step 4:
|
|
||||||
|
|
||||||
- Product Name: "find-login-action-extension"
|
|
||||||
|
|
||||||
- Organization Identifier: "com.8bit.bitwarden"
|
|
||||||
|
|
||||||
- Bundle Identifier (automatically generated): "com.8bit.bitwarden.find-login-action-extension"
|
|
||||||
|
|
||||||
10. Repeat Steps 3-8, with the following changes in step 4:
|
|
||||||
|
|
||||||
- Product Name: "autofill"
|
|
||||||
|
|
||||||
- Organization Identifier: "com.8bit.bitwarden"
|
|
||||||
|
|
||||||
- Bundle Identifier (automatically generated): "com.8bit.bitwarden.autofill"
|
|
||||||
|
|
||||||
11. Repeat Steps 3-8, with the following changes in step 4:
|
|
||||||
|
|
||||||
- Product Name: "share-extension"
|
|
||||||
|
|
||||||
- Organization Identifier: "com.8bit.bitwarden"
|
|
||||||
|
|
||||||
- Bundle Identifier (automatically generated): "com.8bit.bitwarden.share-extension"
|
|
||||||
|
|
||||||
12. If you have a physical device (e.g. iPhone or iPad) that you want to use for testing, you will
|
|
||||||
also need to do the following for each of the Xcode projects you just created:
|
|
||||||
|
|
||||||
- connect the device with a cable
|
|
||||||
|
|
||||||
- select your device as as the build target in Xcode
|
|
||||||
|
|
||||||
- from the menu bar, click Product > Build
|
|
||||||
|
|
||||||
- agree to register your device if asked
|
|
||||||
|
|
||||||
:::note
|
|
||||||
|
|
||||||
Sometimes these profiles can mess up. If you have issues running on your physical device (or
|
|
||||||
simulator) try running `rm -r ~/Library/MobileDevice/Provisioning\ Profiles` to clear them out.
|
|
||||||
Build each Xcode project again to regenerate them.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Visual Studio
|
|
||||||
|
|
||||||
Next, we need to configure your Visual Studio environment for development.
|
|
||||||
|
|
||||||
<Tabs groupId="os">
|
|
||||||
<TabItem value="win" label="Windows" default>
|
|
||||||
|
|
||||||
1. Connect to the Mac that you just completed the above steps on
|
|
||||||
|
|
||||||
2. Open Visual Studio and click Tools > iOS > Pair to Mac
|
|
||||||
|
|
||||||
3. Scan for and select your machine. If you don't see it, click the "Add Mac..." button and put in
|
|
||||||
the Mac name or IP address. If you don't know your Mac name (or you're in a Windows VM on your
|
|
||||||
Mac), go to your Mac and open System Preferences > Sharing and look for the ".local" address of
|
|
||||||
your machine
|
|
||||||
|
|
||||||
4. Provide your Username and Password for macOS when prompted
|
|
||||||
|
|
||||||
5. Once paired, close the Pair Mac window
|
|
||||||
|
|
||||||
6. Change your active build profile to Debug > iPhoneSimulator > iOS
|
|
||||||
|
|
||||||
7. Rebuild the iOS project from Solution Explorer
|
|
||||||
|
|
||||||
8. You can now debug using the iOS Simulator
|
|
||||||
|
|
||||||
</TabItem>
|
|
||||||
<TabItem value="mac" label="macOS">
|
|
||||||
|
|
||||||
1. Check that command line tools are installed:
|
|
||||||
|
|
||||||
1. Open Xcode
|
|
||||||
|
|
||||||
2. From the menu bar, click Xcode > Preferences > Locations
|
|
||||||
|
|
||||||
3. Make sure an Xcode version is selected under "Command Line Tools"
|
|
||||||
|
|
||||||
2. Open Visual Studio for Mac
|
|
||||||
|
|
||||||
3. Open the mobile solution file (`bitwarden-mobile.sln`) in the root of your local mobile
|
|
||||||
repository
|
|
||||||
|
|
||||||
4. In the top bar, you should be able to select App > Debug > select your model and click run (or
|
|
||||||
your physical device if you set one up)
|
|
||||||
|
|
||||||
</TabItem>
|
|
||||||
</Tabs>
|
|
||||||
|
|
||||||
## Building
|
|
||||||
|
|
||||||
To build from the CLI, navigate to the application directory:
|
|
||||||
|
|
||||||
For device:
|
|
||||||
|
|
||||||
```
|
|
||||||
cd src/App
|
|
||||||
dotnet build -f net8.0-ios -c Debug -r ios-arm64
|
|
||||||
```
|
|
||||||
|
|
||||||
For simulator:
|
|
||||||
|
|
||||||
```
|
|
||||||
cd src/App
|
|
||||||
dotnet build -f net8.0-ios -c Debug -r iossimulator-x64
|
|
||||||
```
|
|
||||||
|
|
||||||
You can also use the IDE but keep in mind:
|
|
||||||
|
|
||||||
:::tip Visual Studio for Mac
|
|
||||||
|
|
||||||
There are currently a few problems on Visual Studio for Mac for building correctly the projects, so
|
|
||||||
if you encounter some errors, build using the CLI being into the `src/App` folder (previously
|
|
||||||
removing bin/obj folders).
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
:::tip Argon2Id
|
|
||||||
|
|
||||||
If you find any errors regarding argon2Id library when building for simulator, please be sure that
|
|
||||||
you are building for runtime identifier `iossimulator-x64` as currently the library doesn't support
|
|
||||||
`iossimulator-arm64`.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
:::tip Troubleshooting common mistakes
|
|
||||||
|
|
||||||
If you find the next error:
|
|
||||||
|
|
||||||
> `error NETSDK1134`: Building a solution with a specific RuntimeIdentifier is not supported. If you
|
|
||||||
> would like to publish for a single RID, specify the RID at the individual project level instead
|
|
||||||
|
|
||||||
you almost surely are trying to build the app from the root folder. Instead go to `src/App` and try
|
|
||||||
building again.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
### Argon2Id library loading
|
|
||||||
|
|
||||||
The Argon2Id library (`libargon2.a`) is loaded using `MTouchExtraArgs` in almost all projects of the
|
|
||||||
solution. In order to make this simpler a property was added into **Directory.Build.props** called
|
|
||||||
`Argon2IdLoadMtouchExtraArgs` which has the code to fill in the extra args parameter. Each project
|
|
||||||
is configured with this property so this is only added on the correct runtime identifiers and we can
|
|
||||||
build the app successfully on each case.
|
|
||||||
|
|
||||||
### Ignoring extensions / watchOS app
|
|
||||||
|
|
||||||
Sometimes we need to quickly build the app or maybe some configuration on the iOS extensions or the
|
|
||||||
watchOS app gets in the way. In order to have a fast way to only care about the main app two
|
|
||||||
properties were added to the **Directory.Build.Props** to help with this:
|
|
||||||
|
|
||||||
- `IncludeBitwardeniOSExtensions`: If `True` then all the iOS extensions will be included on the
|
|
||||||
building of the main app, otherwise they will be skipped.
|
|
||||||
- `IncludeBitwardenWatchOSApp`: If `True` then the watchOS app will be included on the building of
|
|
||||||
the main app, otherwise it will be skipped.
|
|
||||||
|
|
||||||
:::warning Shared code
|
|
||||||
|
|
||||||
Toggling these off can provide a faster developer experience which is really useful in a lot of
|
|
||||||
scenarios, but always bear in mind that a lot of things are shared between the main app and the
|
|
||||||
extensions so before pushing your work, test again with everything enabled just in case.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
### Release mode locally
|
|
||||||
|
|
||||||
There are some issues that require us to build the app on **Release** configuration but locally
|
|
||||||
without going through the CI/CD pipeline. The problem is that we don't have the code signing details
|
|
||||||
for Distribution locally. To overcome this we can use the same `CodesignProvision` and `CodesignKey`
|
|
||||||
we use for **Debug** but on the **Release** config. The thing is that it's a bit cumbersome to
|
|
||||||
change that on every project so two properties were added to the **Directory.Build.Props** to help
|
|
||||||
with this:
|
|
||||||
|
|
||||||
- `ReleaseCodesignProvision`: `CodesignProvision` for Release config on all projects
|
|
||||||
- `ReleaseCodesignKey`: `CodesignKey` for Release config on all projects
|
|
||||||
|
|
||||||
By replacing their values, all projects will have their values applied so it's easier to build the
|
|
||||||
app in **Release** mode locally.
|
|
||||||
|
|
||||||
## Debugging
|
|
||||||
|
|
||||||
### iPhone Simulator
|
|
||||||
|
|
||||||
The iPhone Simulator has access to localhost and you can point the client at your local dev server
|
|
||||||
as usual. However, the app will require https by default. To allow http for testing purposes, follow
|
|
||||||
these steps.
|
|
||||||
|
|
||||||
1. Open `src/App/Platforms/iOS/Info.plist` in Visual Studio Code or another editor so that you can
|
|
||||||
edit the raw XML. (Don't use the Property List Editor in Visual Studio.)
|
|
||||||
|
|
||||||
2. Add the following code in the top-level `<dict>` element:
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<key>NSAppTransportSecurity</key>
|
|
||||||
<dict>
|
|
||||||
<key>NSAllowsArbitraryLoads</key>
|
|
||||||
<false/>
|
|
||||||
<key>NSExceptionDomains</key>
|
|
||||||
<dict>
|
|
||||||
<key>localhost</key>
|
|
||||||
<dict>
|
|
||||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
|
||||||
<true/>
|
|
||||||
<key>NSIncludesSubdomains</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Save and exit `Info.plist`
|
|
||||||
|
|
||||||
4. Press <kbd>Command</kbd> + <kbd>B</kbd> to force a new build before launching
|
|
||||||
|
|
||||||
5. Don't push these changes :)
|
|
||||||
|
|
||||||
### iPhone device
|
|
||||||
|
|
||||||
The device doesn’t have direct access to your Mac’s localhost, so you can follow
|
|
||||||
[this guide to connect them](https://ymoondhra.medium.com/how-to-run-localhost-on-your-iphone-4110a54d1896).
|
|
||||||
|
|
||||||
After you do that, you’ll have to also modify the `Info.plist` to allow http for testing purposes as
|
|
||||||
explained before on the simulator testing.
|
|
||||||
|
|
||||||
It’s also highly likely that you need to change the `launchSettings.json` on Server, on `Properties`
|
|
||||||
of each project. There you need to change the `applicationUrl` of `iisSettings -> iisExpress` and of
|
|
||||||
`profiles -> Identify` so that instead of `localhost` it says `name.local` where `name` is the
|
|
||||||
computer name you set on Mac’s Sharing config.
|
|
||||||
|
|
||||||
Before you actually test on the app, open a browser and try to connect to the `Api` by going to
|
|
||||||
`http://name.local:4000/alive` . If this doesn’t work then review the steps on the guide or the
|
|
||||||
server configuration. Make sure you have your `User secrets` up to date as well.
|
|
||||||
|
|
||||||
Finally, you’ll have to configure the `Api` and `Identity` urls on the phone to use
|
|
||||||
`http://name.local:4000` and `http://name.local:33656` where `name` is the computer name you set on
|
|
||||||
Mac’s Sharing config.
|
|
||||||
|
|
||||||
### iOS Extensions
|
|
||||||
|
|
||||||
1. Set the iOS Extension project as Startup project
|
|
||||||
|
|
||||||
2. Press Run
|
|
||||||
|
|
||||||
3. You will receive a popup saying "Waiting for the debugger to connect..."
|
|
||||||
|
|
||||||
4. Don’t open the Bitwarden app (otherwise the debugger will connect to it instead of the
|
|
||||||
extension). Instead trigger the extension
|
|
||||||
|
|
||||||
5. Your extension breakpoints should now be hit
|
|
||||||
|
|
||||||
For example: if you want to debug the **iOS.Autofill** extension, you would complete steps 1 - 3,
|
|
||||||
then go to your iOS device, open a browser, go to a login, tap the key icon and open Bitwarden from
|
|
||||||
the bottom popup.
|
|
||||||
|
|
||||||
### Using Server Tunneling
|
|
||||||
|
|
||||||
Instead of configuring your device or emulator to ignore SSL certificates, you can instead use a
|
|
||||||
[proxy tunnel to your local server](../../../server/tunnel.md) and have your app connect to it
|
|
||||||
directly.
|
|
||||||
|
|
||||||
### Push Notifications (Live Sync & Passwordless)
|
|
||||||
|
|
||||||
Push notifications are not currently available for debug deployments. They are only supported on
|
|
||||||
TestFlight and production builds.
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 95 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 14 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 307 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 28 KiB |
@@ -1,101 +0,0 @@
|
|||||||
---
|
|
||||||
sidebar_custom_props:
|
|
||||||
access: bitwarden
|
|
||||||
---
|
|
||||||
|
|
||||||
# watchOS
|
|
||||||
|
|
||||||
:::warning Legacy
|
|
||||||
|
|
||||||
Getting started the **legacy** watchOS app done in .NET MAUI.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Requirements
|
|
||||||
|
|
||||||
Follow the [iOS Setup](../ios/index.mdx).
|
|
||||||
|
|
||||||
In order for everything to work properly **devices** are needed. On simulators the synchronization
|
|
||||||
won't work (and some other parts may not work as well). Also, have Bluetooth enabled if possible to
|
|
||||||
ease the sync between devices and the debugging communication.
|
|
||||||
|
|
||||||
It's recommended to read the
|
|
||||||
[Watch Architecture](../../../../../architecture/mobile-clients/net-maui-legacy/watchOS) as well.
|
|
||||||
|
|
||||||
## macOS Setup
|
|
||||||
|
|
||||||
Having followed the macOS setup of iOS, no additional configuration is needed given that when the
|
|
||||||
project is opened in Xcode it will automatically have the provisioning profiles set up.
|
|
||||||
|
|
||||||
## Debugging
|
|
||||||
|
|
||||||
There are two parts from where to debug:
|
|
||||||
|
|
||||||
- From Visual Studio for Mac (the iOS app)
|
|
||||||
- From Xcode (the watchOS app)
|
|
||||||
|
|
||||||
For now, there is no way to debug both apps (iOS and watchOS) at the same time given that from MAUI
|
|
||||||
there is no access to debug information of the watchOS app and from Xcode an iOS stub app is
|
|
||||||
installed on the iPhone to debug it. So, at the moment of debugging one needs to choose which part
|
|
||||||
to have information about, therefore whether to debug from VS4M or from Xcode.
|
|
||||||
|
|
||||||
:::caution
|
|
||||||
|
|
||||||
When debugging from Xcode the MAUI iOS app will be replaced with the stub one from Xcode. So any
|
|
||||||
configuration on the iOS app will be lost (like server urls)
|
|
||||||
|
|
||||||
When debugging from VS4M, uninstall the previous watchOS app (if any) from the Apple Watch in
|
|
||||||
between builds to have it always up to date (there are times that if one doesn't uninstall the
|
|
||||||
previous watchOS app it doesn't get updated)
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
:::tip
|
|
||||||
|
|
||||||
If one needs to get the logs or use the _Console_ app to see the logs from the watch then one needs
|
|
||||||
to install the `sysdiagnose` profile for watchOS from Apple Developer site
|
|
||||||
[here](https://developer.apple.com/bug-reporting/profiles-and-logs/?name=sysdiagnose) into the
|
|
||||||
paired iPhone and after that restart both devices in order for the logs to work.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
### Building
|
|
||||||
|
|
||||||
Given that the MAUI iOS app needs the output of the build of Xcode, one needs to build the watchOS
|
|
||||||
app from Xcode first and then from VS4M build the iOS app to run it on the device.
|
|
||||||
|
|
||||||
The output of Xcode build is stored in a location pretty similar to the next one that is configured
|
|
||||||
in the `iOS.csproj`:
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<PropertyGroup>
|
|
||||||
<WatchAppBuildPath Condition=" '$(Configuration)' == 'Debug' ">$(Home)/Library/Developer/Xcode/DerivedData/bitwarden-cbtqsueryycvflfzbsoteofskiyr/Build/Products</WatchAppBuildPath>
|
|
||||||
```
|
|
||||||
|
|
||||||
It's highly likely that the folder `bitwarden-cbtqsueryycvflfzbsoteofskiyr` won't be the same on
|
|
||||||
every Mac. So one needs to change that part in `iOS.csproj` to the one created automatically by
|
|
||||||
Xcode locally.
|
|
||||||
|
|
||||||
To know exactly which is the path: Open the Project in Xcode -> Go to Product -> Show Build Folder
|
|
||||||
in Finder.
|
|
||||||
|
|
||||||
_This needs to be improved to have a fixed location or an easier way to get it automatically._
|
|
||||||
|
|
||||||
:::caution
|
|
||||||
|
|
||||||
One needs to take special attention to target the same platform on both IDEs. Therefore when running
|
|
||||||
on a device, target the device both in Xcode and on VS4M when building so that the watchOS app is
|
|
||||||
bundled correctly. Also one needs to make sure that "bitwarden WatchKit app" scheme is selected.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
### Synchronization
|
|
||||||
|
|
||||||
There is no way to debug the synchronization completely at the same time for the reasons
|
|
||||||
aforementioned.
|
|
||||||
|
|
||||||
So one can debug one end (iOS) or the other (watchOS).
|
|
||||||
|
|
||||||
If needed to check something on both ends "at the same time" (like to check why a message is not
|
|
||||||
sent/arrived), one needs to use console logging or adapt part of the MAUI code to the iOS stub app
|
|
||||||
on Xcode and debug the synchronization from Xcode.
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"sdk": {
|
|
||||||
"version": "8.0.402",
|
|
||||||
"rollForward": "disable"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
1
lib/MessagePack
Submodule
1
lib/MessagePack
Submodule
Submodule lib/MessagePack added at 1ecb15e311
@@ -1,19 +0,0 @@
|
|||||||
Copyright 2018 Read Evaluate Press, LLC
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
copy of this software and associated documentation files (the "Software"),
|
|
||||||
to deal in the Software without restriction, including without limitation
|
|
||||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
DEALINGS IN THE SOFTWARE.
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
Pod::Spec.new do |s|
|
|
||||||
s.name = 'MessagePack-FlightSchool'
|
|
||||||
s.module_name = 'MessagePack'
|
|
||||||
s.version = '1.2.4'
|
|
||||||
s.summary = 'A MessagePack encoder and decoder for Codable types.'
|
|
||||||
|
|
||||||
s.description = <<-DESC
|
|
||||||
This functionality is discussed in Chapter 7 of
|
|
||||||
Flight School Guide to Swift Codable.
|
|
||||||
DESC
|
|
||||||
|
|
||||||
s.homepage = 'https://flight.school/books/codable/'
|
|
||||||
|
|
||||||
s.license = { type: 'MIT', file: 'LICENSE.md' }
|
|
||||||
|
|
||||||
s.author = { 'Mattt' => 'mattt@flight.school' }
|
|
||||||
|
|
||||||
s.social_media_url = 'https://twitter.com/mattt'
|
|
||||||
|
|
||||||
s.ios.deployment_target = '8.0'
|
|
||||||
s.osx.deployment_target = '10.10'
|
|
||||||
s.watchos.deployment_target = '2.0'
|
|
||||||
s.tvos.deployment_target = '9.0'
|
|
||||||
|
|
||||||
s.source = { git: 'https://github.com/Flight-School/MessagePack.git',
|
|
||||||
tag: s.version.to_s }
|
|
||||||
|
|
||||||
s.source_files = 'Sources/**/*.swift'
|
|
||||||
|
|
||||||
s.swift_version = '4.2'
|
|
||||||
s.static_framework = true
|
|
||||||
end
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
import MessagePack
|
|
||||||
|
|
||||||
let encoder = MessagePackEncoder()
|
|
||||||
|
|
||||||
let value: String = "hello"
|
|
||||||
let encodedData = try encoder.encode(value)
|
|
||||||
|
|
||||||
print("Bytes: ", encodedData.map{ String($0, radix: 16, uppercase: true) })
|
|
||||||
|
|
||||||
let decoder = MessagePackDecoder()
|
|
||||||
let decodedValue = try decoder.decode(String.self, from: encodedData)
|
|
||||||
|
|
||||||
decodedValue == value
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<playground version='5.0' target-platform='macos' executeOnSourceChanges='false'>
|
|
||||||
<timeline fileName='timeline.xctimeline'/>
|
|
||||||
</playground>
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>en</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>$(PRODUCT_NAME)</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>BNDL</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>1.0</string>
|
|
||||||
<key>CFBundleSignature</key>
|
|
||||||
<string>????</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
|
||||||
<key>NSPrincipalClass</key>
|
|
||||||
<string></string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>en</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>$(PRODUCT_NAME)</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>FMWK</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>1.0</string>
|
|
||||||
<key>CFBundleSignature</key>
|
|
||||||
<string>????</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
|
||||||
<key>NSPrincipalClass</key>
|
|
||||||
<string></string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
@@ -1,543 +0,0 @@
|
|||||||
// !$*UTF8*$!
|
|
||||||
{
|
|
||||||
archiveVersion = 1;
|
|
||||||
classes = {
|
|
||||||
};
|
|
||||||
objectVersion = 46;
|
|
||||||
objects = {
|
|
||||||
|
|
||||||
/* Begin PBXAggregateTarget section */
|
|
||||||
"MessagePack::MessagePackPackageTests::ProductTarget" /* MessagePackPackageTests */ = {
|
|
||||||
isa = PBXAggregateTarget;
|
|
||||||
buildConfigurationList = OBJ_57 /* Build configuration list for PBXAggregateTarget "MessagePackPackageTests" */;
|
|
||||||
buildPhases = (
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
OBJ_60 /* PBXTargetDependency */,
|
|
||||||
);
|
|
||||||
name = MessagePackPackageTests;
|
|
||||||
productName = MessagePackPackageTests;
|
|
||||||
};
|
|
||||||
/* End PBXAggregateTarget section */
|
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
|
||||||
1BC312FF2992DE9C00177F2A /* DataSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BC312FE2992DE9C00177F2A /* DataSpec.swift */; };
|
|
||||||
OBJ_38 /* AnyCodingKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_9 /* AnyCodingKey.swift */; };
|
|
||||||
OBJ_39 /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_10 /* Box.swift */; };
|
|
||||||
OBJ_40 /* KeyedDecodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_12 /* KeyedDecodingContainer.swift */; };
|
|
||||||
OBJ_41 /* MessagePackDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_13 /* MessagePackDecoder.swift */; };
|
|
||||||
OBJ_42 /* SingleValueDecodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_14 /* SingleValueDecodingContainer.swift */; };
|
|
||||||
OBJ_43 /* UnkeyedDecodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_15 /* UnkeyedDecodingContainer.swift */; };
|
|
||||||
OBJ_44 /* KeyedEncodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_17 /* KeyedEncodingContainer.swift */; };
|
|
||||||
OBJ_45 /* MessagePackEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_18 /* MessagePackEncoder.swift */; };
|
|
||||||
OBJ_46 /* SingleValueEncodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_19 /* SingleValueEncodingContainer.swift */; };
|
|
||||||
OBJ_47 /* UnkeyedEncodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_20 /* UnkeyedEncodingContainer.swift */; };
|
|
||||||
OBJ_48 /* FixedWidthInteger+Bytes.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_21 /* FixedWidthInteger+Bytes.swift */; };
|
|
||||||
OBJ_55 /* Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_6 /* Package.swift */; };
|
|
||||||
OBJ_66 /* Airport.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_24 /* Airport.swift */; };
|
|
||||||
OBJ_67 /* MessagePackDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_25 /* MessagePackDecodingTests.swift */; };
|
|
||||||
OBJ_68 /* MessagePackEncodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_26 /* MessagePackEncodingTests.swift */; };
|
|
||||||
OBJ_69 /* MessagePackPerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_27 /* MessagePackPerformanceTests.swift */; };
|
|
||||||
OBJ_70 /* MessagePackRoundTripTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_28 /* MessagePackRoundTripTests.swift */; };
|
|
||||||
OBJ_72 /* MessagePack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = "MessagePack::MessagePack::Product" /* MessagePack.framework */; };
|
|
||||||
/* End PBXBuildFile section */
|
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
|
||||||
1BC312FC2989A1AD00177F2A /* PBXContainerItemProxy */ = {
|
|
||||||
isa = PBXContainerItemProxy;
|
|
||||||
containerPortal = OBJ_1 /* Project object */;
|
|
||||||
proxyType = 1;
|
|
||||||
remoteGlobalIDString = "MessagePack::MessagePack";
|
|
||||||
remoteInfo = MessagePack;
|
|
||||||
};
|
|
||||||
1BC312FD2989A1B200177F2A /* PBXContainerItemProxy */ = {
|
|
||||||
isa = PBXContainerItemProxy;
|
|
||||||
containerPortal = OBJ_1 /* Project object */;
|
|
||||||
proxyType = 1;
|
|
||||||
remoteGlobalIDString = "MessagePack::MessagePackTests";
|
|
||||||
remoteInfo = MessagePackTests;
|
|
||||||
};
|
|
||||||
/* End PBXContainerItemProxy section */
|
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
|
||||||
1BC312FE2992DE9C00177F2A /* DataSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataSpec.swift; sourceTree = "<group>"; };
|
|
||||||
"MessagePack::MessagePack::Product" /* MessagePack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MessagePack.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
"MessagePack::MessagePackTests::Product" /* MessagePackTests.xctest */ = {isa = PBXFileReference; lastKnownFileType = file; path = MessagePackTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
OBJ_10 /* Box.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Box.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_12 /* KeyedDecodingContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyedDecodingContainer.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_13 /* MessagePackDecoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagePackDecoder.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_14 /* SingleValueDecodingContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingleValueDecodingContainer.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_15 /* UnkeyedDecodingContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnkeyedDecodingContainer.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_17 /* KeyedEncodingContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyedEncodingContainer.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_18 /* MessagePackEncoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagePackEncoder.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_19 /* SingleValueEncodingContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingleValueEncodingContainer.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_20 /* UnkeyedEncodingContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnkeyedEncodingContainer.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_21 /* FixedWidthInteger+Bytes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FixedWidthInteger+Bytes.swift"; sourceTree = "<group>"; };
|
|
||||||
OBJ_24 /* Airport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Airport.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_25 /* MessagePackDecodingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagePackDecodingTests.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_26 /* MessagePackEncodingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagePackEncodingTests.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_27 /* MessagePackPerformanceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagePackPerformanceTests.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_28 /* MessagePackRoundTripTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagePackRoundTripTests.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_29 /* MessagePack.xcworkspace */ = {isa = PBXFileReference; lastKnownFileType = wrapper.workspace; path = MessagePack.xcworkspace; sourceTree = SOURCE_ROOT; };
|
|
||||||
OBJ_6 /* Package.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; path = Package.swift; sourceTree = "<group>"; };
|
|
||||||
OBJ_9 /* AnyCodingKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyCodingKey.swift; sourceTree = "<group>"; };
|
|
||||||
/* End PBXFileReference section */
|
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
|
||||||
OBJ_49 /* Frameworks */ = {
|
|
||||||
isa = PBXFrameworksBuildPhase;
|
|
||||||
buildActionMask = 0;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
OBJ_71 /* Frameworks */ = {
|
|
||||||
isa = PBXFrameworksBuildPhase;
|
|
||||||
buildActionMask = 0;
|
|
||||||
files = (
|
|
||||||
OBJ_72 /* MessagePack.framework in Frameworks */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXFrameworksBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
|
||||||
OBJ_11 /* Decoder */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
OBJ_12 /* KeyedDecodingContainer.swift */,
|
|
||||||
OBJ_13 /* MessagePackDecoder.swift */,
|
|
||||||
OBJ_14 /* SingleValueDecodingContainer.swift */,
|
|
||||||
OBJ_15 /* UnkeyedDecodingContainer.swift */,
|
|
||||||
);
|
|
||||||
path = Decoder;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
OBJ_16 /* Encoder */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
OBJ_17 /* KeyedEncodingContainer.swift */,
|
|
||||||
OBJ_18 /* MessagePackEncoder.swift */,
|
|
||||||
OBJ_19 /* SingleValueEncodingContainer.swift */,
|
|
||||||
OBJ_20 /* UnkeyedEncodingContainer.swift */,
|
|
||||||
);
|
|
||||||
path = Encoder;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
OBJ_22 /* Tests */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
OBJ_23 /* MessagePackTests */,
|
|
||||||
);
|
|
||||||
name = Tests;
|
|
||||||
sourceTree = SOURCE_ROOT;
|
|
||||||
};
|
|
||||||
OBJ_23 /* MessagePackTests */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
OBJ_24 /* Airport.swift */,
|
|
||||||
OBJ_25 /* MessagePackDecodingTests.swift */,
|
|
||||||
OBJ_26 /* MessagePackEncodingTests.swift */,
|
|
||||||
OBJ_27 /* MessagePackPerformanceTests.swift */,
|
|
||||||
OBJ_28 /* MessagePackRoundTripTests.swift */,
|
|
||||||
);
|
|
||||||
name = MessagePackTests;
|
|
||||||
path = Tests/MessagePackTests;
|
|
||||||
sourceTree = SOURCE_ROOT;
|
|
||||||
};
|
|
||||||
OBJ_30 /* Products */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
"MessagePack::MessagePackTests::Product" /* MessagePackTests.xctest */,
|
|
||||||
"MessagePack::MessagePack::Product" /* MessagePack.framework */,
|
|
||||||
);
|
|
||||||
name = Products;
|
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
|
||||||
};
|
|
||||||
OBJ_5 /* */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
OBJ_6 /* Package.swift */,
|
|
||||||
OBJ_7 /* Sources */,
|
|
||||||
OBJ_22 /* Tests */,
|
|
||||||
OBJ_29 /* MessagePack.xcworkspace */,
|
|
||||||
OBJ_30 /* Products */,
|
|
||||||
);
|
|
||||||
name = "";
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
OBJ_7 /* Sources */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
OBJ_8 /* MessagePack */,
|
|
||||||
);
|
|
||||||
name = Sources;
|
|
||||||
sourceTree = SOURCE_ROOT;
|
|
||||||
};
|
|
||||||
OBJ_8 /* MessagePack */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
OBJ_9 /* AnyCodingKey.swift */,
|
|
||||||
OBJ_10 /* Box.swift */,
|
|
||||||
OBJ_11 /* Decoder */,
|
|
||||||
OBJ_16 /* Encoder */,
|
|
||||||
OBJ_21 /* FixedWidthInteger+Bytes.swift */,
|
|
||||||
1BC312FE2992DE9C00177F2A /* DataSpec.swift */,
|
|
||||||
);
|
|
||||||
name = MessagePack;
|
|
||||||
path = Sources/MessagePack;
|
|
||||||
sourceTree = SOURCE_ROOT;
|
|
||||||
};
|
|
||||||
/* End PBXGroup section */
|
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
|
||||||
"MessagePack::MessagePack" /* MessagePack */ = {
|
|
||||||
isa = PBXNativeTarget;
|
|
||||||
buildConfigurationList = OBJ_34 /* Build configuration list for PBXNativeTarget "MessagePack" */;
|
|
||||||
buildPhases = (
|
|
||||||
OBJ_37 /* Sources */,
|
|
||||||
OBJ_49 /* Frameworks */,
|
|
||||||
);
|
|
||||||
buildRules = (
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
);
|
|
||||||
name = MessagePack;
|
|
||||||
productName = MessagePack;
|
|
||||||
productReference = "MessagePack::MessagePack::Product" /* MessagePack.framework */;
|
|
||||||
productType = "com.apple.product-type.framework";
|
|
||||||
};
|
|
||||||
"MessagePack::MessagePackTests" /* MessagePackTests */ = {
|
|
||||||
isa = PBXNativeTarget;
|
|
||||||
buildConfigurationList = OBJ_62 /* Build configuration list for PBXNativeTarget "MessagePackTests" */;
|
|
||||||
buildPhases = (
|
|
||||||
OBJ_65 /* Sources */,
|
|
||||||
OBJ_71 /* Frameworks */,
|
|
||||||
);
|
|
||||||
buildRules = (
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
OBJ_73 /* PBXTargetDependency */,
|
|
||||||
);
|
|
||||||
name = MessagePackTests;
|
|
||||||
productName = MessagePackTests;
|
|
||||||
productReference = "MessagePack::MessagePackTests::Product" /* MessagePackTests.xctest */;
|
|
||||||
productType = "com.apple.product-type.bundle.unit-test";
|
|
||||||
};
|
|
||||||
"MessagePack::SwiftPMPackageDescription" /* MessagePackPackageDescription */ = {
|
|
||||||
isa = PBXNativeTarget;
|
|
||||||
buildConfigurationList = OBJ_51 /* Build configuration list for PBXNativeTarget "MessagePackPackageDescription" */;
|
|
||||||
buildPhases = (
|
|
||||||
OBJ_54 /* Sources */,
|
|
||||||
);
|
|
||||||
buildRules = (
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
);
|
|
||||||
name = MessagePackPackageDescription;
|
|
||||||
productName = MessagePackPackageDescription;
|
|
||||||
productType = "com.apple.product-type.framework";
|
|
||||||
};
|
|
||||||
/* End PBXNativeTarget section */
|
|
||||||
|
|
||||||
/* Begin PBXProject section */
|
|
||||||
OBJ_1 /* Project object */ = {
|
|
||||||
isa = PBXProject;
|
|
||||||
attributes = {
|
|
||||||
LastUpgradeCheck = 9999;
|
|
||||||
};
|
|
||||||
buildConfigurationList = OBJ_2 /* Build configuration list for PBXProject "MessagePack" */;
|
|
||||||
compatibilityVersion = "Xcode 3.2";
|
|
||||||
developmentRegion = English;
|
|
||||||
hasScannedForEncodings = 0;
|
|
||||||
knownRegions = (
|
|
||||||
English,
|
|
||||||
en,
|
|
||||||
);
|
|
||||||
mainGroup = OBJ_5 /* */;
|
|
||||||
productRefGroup = OBJ_30 /* Products */;
|
|
||||||
projectDirPath = "";
|
|
||||||
projectRoot = "";
|
|
||||||
targets = (
|
|
||||||
"MessagePack::MessagePack" /* MessagePack */,
|
|
||||||
"MessagePack::SwiftPMPackageDescription" /* MessagePackPackageDescription */,
|
|
||||||
"MessagePack::MessagePackPackageTests::ProductTarget" /* MessagePackPackageTests */,
|
|
||||||
"MessagePack::MessagePackTests" /* MessagePackTests */,
|
|
||||||
);
|
|
||||||
};
|
|
||||||
/* End PBXProject section */
|
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
|
||||||
OBJ_37 /* Sources */ = {
|
|
||||||
isa = PBXSourcesBuildPhase;
|
|
||||||
buildActionMask = 0;
|
|
||||||
files = (
|
|
||||||
OBJ_38 /* AnyCodingKey.swift in Sources */,
|
|
||||||
OBJ_39 /* Box.swift in Sources */,
|
|
||||||
OBJ_40 /* KeyedDecodingContainer.swift in Sources */,
|
|
||||||
OBJ_41 /* MessagePackDecoder.swift in Sources */,
|
|
||||||
OBJ_42 /* SingleValueDecodingContainer.swift in Sources */,
|
|
||||||
OBJ_43 /* UnkeyedDecodingContainer.swift in Sources */,
|
|
||||||
OBJ_44 /* KeyedEncodingContainer.swift in Sources */,
|
|
||||||
OBJ_45 /* MessagePackEncoder.swift in Sources */,
|
|
||||||
OBJ_46 /* SingleValueEncodingContainer.swift in Sources */,
|
|
||||||
OBJ_47 /* UnkeyedEncodingContainer.swift in Sources */,
|
|
||||||
1BC312FF2992DE9C00177F2A /* DataSpec.swift in Sources */,
|
|
||||||
OBJ_48 /* FixedWidthInteger+Bytes.swift in Sources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
OBJ_54 /* Sources */ = {
|
|
||||||
isa = PBXSourcesBuildPhase;
|
|
||||||
buildActionMask = 0;
|
|
||||||
files = (
|
|
||||||
OBJ_55 /* Package.swift in Sources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
OBJ_65 /* Sources */ = {
|
|
||||||
isa = PBXSourcesBuildPhase;
|
|
||||||
buildActionMask = 0;
|
|
||||||
files = (
|
|
||||||
OBJ_66 /* Airport.swift in Sources */,
|
|
||||||
OBJ_67 /* MessagePackDecodingTests.swift in Sources */,
|
|
||||||
OBJ_68 /* MessagePackEncodingTests.swift in Sources */,
|
|
||||||
OBJ_69 /* MessagePackPerformanceTests.swift in Sources */,
|
|
||||||
OBJ_70 /* MessagePackRoundTripTests.swift in Sources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXSourcesBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXTargetDependency section */
|
|
||||||
OBJ_60 /* PBXTargetDependency */ = {
|
|
||||||
isa = PBXTargetDependency;
|
|
||||||
target = "MessagePack::MessagePackTests" /* MessagePackTests */;
|
|
||||||
targetProxy = 1BC312FD2989A1B200177F2A /* PBXContainerItemProxy */;
|
|
||||||
};
|
|
||||||
OBJ_73 /* PBXTargetDependency */ = {
|
|
||||||
isa = PBXTargetDependency;
|
|
||||||
target = "MessagePack::MessagePack" /* MessagePack */;
|
|
||||||
targetProxy = 1BC312FC2989A1AD00177F2A /* PBXContainerItemProxy */;
|
|
||||||
};
|
|
||||||
/* End PBXTargetDependency section */
|
|
||||||
|
|
||||||
/* Begin XCBuildConfiguration section */
|
|
||||||
OBJ_3 /* Debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
|
||||||
COPY_PHASE_STRIP = NO;
|
|
||||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
|
||||||
ENABLE_NS_ASSERTIONS = YES;
|
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
|
||||||
"DEBUG=1",
|
|
||||||
"$(inherited)",
|
|
||||||
);
|
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
|
||||||
OTHER_SWIFT_FLAGS = "-DXcode";
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
||||||
SDKROOT = macosx;
|
|
||||||
SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator";
|
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "SWIFT_PACKAGE DEBUG";
|
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
|
||||||
USE_HEADERMAP = NO;
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
OBJ_35 /* Debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
ENABLE_TESTABILITY = YES;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"$(PLATFORM_DIR)/Developer/Library/Frameworks",
|
|
||||||
);
|
|
||||||
HEADER_SEARCH_PATHS = "$(inherited)";
|
|
||||||
INFOPLIST_FILE = MessagePack.xcodeproj/MessagePack_Info.plist;
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/macosx";
|
|
||||||
OTHER_CFLAGS = "$(inherited)";
|
|
||||||
OTHER_LDFLAGS = "$(inherited)";
|
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited)";
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = MessagePack;
|
|
||||||
PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)";
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
|
||||||
SKIP_INSTALL = YES;
|
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)";
|
|
||||||
SWIFT_VERSION = 4.0;
|
|
||||||
TARGET_NAME = MessagePack;
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
OBJ_36 /* Release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
ENABLE_TESTABILITY = YES;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"$(PLATFORM_DIR)/Developer/Library/Frameworks",
|
|
||||||
);
|
|
||||||
HEADER_SEARCH_PATHS = "$(inherited)";
|
|
||||||
INFOPLIST_FILE = MessagePack.xcodeproj/MessagePack_Info.plist;
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/macosx";
|
|
||||||
OTHER_CFLAGS = "$(inherited)";
|
|
||||||
OTHER_LDFLAGS = "$(inherited)";
|
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited)";
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = MessagePack;
|
|
||||||
PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)";
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
|
||||||
SKIP_INSTALL = YES;
|
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)";
|
|
||||||
SWIFT_VERSION = 4.0;
|
|
||||||
TARGET_NAME = MessagePack;
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
OBJ_4 /* Release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
|
||||||
COPY_PHASE_STRIP = YES;
|
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
|
||||||
GCC_OPTIMIZATION_LEVEL = s;
|
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
|
||||||
OTHER_SWIFT_FLAGS = "-DXcode";
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
||||||
SDKROOT = macosx;
|
|
||||||
SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator";
|
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = SWIFT_PACKAGE;
|
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
|
||||||
USE_HEADERMAP = NO;
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
OBJ_52 /* Debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
LD = /usr/bin/true;
|
|
||||||
OTHER_SWIFT_FLAGS = "-swift-version 4 -I $(TOOLCHAIN_DIR)/usr/lib/swift/pm/4 -target x86_64-apple-macosx10.10 -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk";
|
|
||||||
SWIFT_VERSION = 4.0;
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
OBJ_53 /* Release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
LD = /usr/bin/true;
|
|
||||||
OTHER_SWIFT_FLAGS = "-swift-version 4 -I $(TOOLCHAIN_DIR)/usr/lib/swift/pm/4 -target x86_64-apple-macosx10.10 -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk";
|
|
||||||
SWIFT_VERSION = 4.0;
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
OBJ_58 /* Debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
OBJ_59 /* Release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
OBJ_63 /* Debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
CLANG_ENABLE_MODULES = YES;
|
|
||||||
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"$(PLATFORM_DIR)/Developer/Library/Frameworks",
|
|
||||||
);
|
|
||||||
HEADER_SEARCH_PATHS = "$(inherited)";
|
|
||||||
INFOPLIST_FILE = MessagePack.xcodeproj/MessagePackTests_Info.plist;
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @loader_path/Frameworks";
|
|
||||||
OTHER_CFLAGS = "$(inherited)";
|
|
||||||
OTHER_LDFLAGS = "$(inherited)";
|
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited)";
|
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)";
|
|
||||||
SWIFT_VERSION = 4.0;
|
|
||||||
TARGET_NAME = MessagePackTests;
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
OBJ_64 /* Release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
CLANG_ENABLE_MODULES = YES;
|
|
||||||
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"$(PLATFORM_DIR)/Developer/Library/Frameworks",
|
|
||||||
);
|
|
||||||
HEADER_SEARCH_PATHS = "$(inherited)";
|
|
||||||
INFOPLIST_FILE = MessagePack.xcodeproj/MessagePackTests_Info.plist;
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @loader_path/Frameworks";
|
|
||||||
OTHER_CFLAGS = "$(inherited)";
|
|
||||||
OTHER_LDFLAGS = "$(inherited)";
|
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited)";
|
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)";
|
|
||||||
SWIFT_VERSION = 4.0;
|
|
||||||
TARGET_NAME = MessagePackTests;
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
/* End XCBuildConfiguration section */
|
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
|
||||||
OBJ_2 /* Build configuration list for PBXProject "MessagePack" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
OBJ_3 /* Debug */,
|
|
||||||
OBJ_4 /* Release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
OBJ_34 /* Build configuration list for PBXNativeTarget "MessagePack" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
OBJ_35 /* Debug */,
|
|
||||||
OBJ_36 /* Release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
OBJ_51 /* Build configuration list for PBXNativeTarget "MessagePackPackageDescription" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
OBJ_52 /* Debug */,
|
|
||||||
OBJ_53 /* Release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
OBJ_57 /* Build configuration list for PBXAggregateTarget "MessagePackPackageTests" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
OBJ_58 /* Debug */,
|
|
||||||
OBJ_59 /* Release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
OBJ_62 /* Build configuration list for PBXNativeTarget "MessagePackTests" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
OBJ_63 /* Debug */,
|
|
||||||
OBJ_64 /* Release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
/* End XCConfigurationList section */
|
|
||||||
};
|
|
||||||
rootObject = OBJ_1 /* Project object */;
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Workspace
|
|
||||||
version = "1.0">
|
|
||||||
<FileRef
|
|
||||||
location = "self:">
|
|
||||||
</FileRef>
|
|
||||||
</Workspace>
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
<?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>IDEDidComputeMac32BitWarning</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
<?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>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Scheme
|
|
||||||
LastUpgradeVersion = "1010"
|
|
||||||
version = "1.3">
|
|
||||||
<BuildAction
|
|
||||||
parallelizeBuildables = "YES"
|
|
||||||
buildImplicitDependencies = "YES">
|
|
||||||
<BuildActionEntries>
|
|
||||||
<BuildActionEntry
|
|
||||||
buildForTesting = "YES"
|
|
||||||
buildForRunning = "YES"
|
|
||||||
buildForProfiling = "YES"
|
|
||||||
buildForArchiving = "YES"
|
|
||||||
buildForAnalyzing = "YES">
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "MessagePack::MessagePack"
|
|
||||||
BuildableName = "MessagePack.framework"
|
|
||||||
BlueprintName = "MessagePack"
|
|
||||||
ReferencedContainer = "container:MessagePack.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</BuildActionEntry>
|
|
||||||
</BuildActionEntries>
|
|
||||||
</BuildAction>
|
|
||||||
<TestAction
|
|
||||||
buildConfiguration = "Debug"
|
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
|
||||||
<Testables>
|
|
||||||
<TestableReference
|
|
||||||
skipped = "NO">
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "MessagePack::MessagePackTests"
|
|
||||||
BuildableName = "MessagePackTests.xctest"
|
|
||||||
BlueprintName = "MessagePackTests"
|
|
||||||
ReferencedContainer = "container:MessagePack.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</TestableReference>
|
|
||||||
</Testables>
|
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "MessagePack::MessagePack"
|
|
||||||
BuildableName = "MessagePack.framework"
|
|
||||||
BlueprintName = "MessagePack"
|
|
||||||
ReferencedContainer = "container:MessagePack.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</TestAction>
|
|
||||||
<LaunchAction
|
|
||||||
buildConfiguration = "Debug"
|
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
||||||
launchStyle = "0"
|
|
||||||
useCustomWorkingDirectory = "NO"
|
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
|
||||||
debugDocumentVersioning = "YES"
|
|
||||||
debugServiceExtension = "internal"
|
|
||||||
allowLocationSimulation = "YES">
|
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "MessagePack::MessagePack"
|
|
||||||
BuildableName = "MessagePack.framework"
|
|
||||||
BlueprintName = "MessagePack"
|
|
||||||
ReferencedContainer = "container:MessagePack.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</LaunchAction>
|
|
||||||
<ProfileAction
|
|
||||||
buildConfiguration = "Release"
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
||||||
savedToolIdentifier = ""
|
|
||||||
useCustomWorkingDirectory = "NO"
|
|
||||||
debugDocumentVersioning = "YES">
|
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "MessagePack::MessagePack"
|
|
||||||
BuildableName = "MessagePack.framework"
|
|
||||||
BlueprintName = "MessagePack"
|
|
||||||
ReferencedContainer = "container:MessagePack.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
</ProfileAction>
|
|
||||||
<AnalyzeAction
|
|
||||||
buildConfiguration = "Debug">
|
|
||||||
</AnalyzeAction>
|
|
||||||
<ArchiveAction
|
|
||||||
buildConfiguration = "Release"
|
|
||||||
revealArchiveInOrganizer = "YES">
|
|
||||||
</ArchiveAction>
|
|
||||||
</Scheme>
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Workspace
|
|
||||||
version = "1.0">
|
|
||||||
<FileRef
|
|
||||||
location = "group:MessagePack.playground">
|
|
||||||
</FileRef>
|
|
||||||
<FileRef
|
|
||||||
location = "group:MessagePack.xcodeproj">
|
|
||||||
</FileRef>
|
|
||||||
</Workspace>
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
<?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>IDEDidComputeMac32BitWarning</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
<?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>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
// swift-tools-version:4.0
|
|
||||||
// The swift-tools-version declares the minimum version of Swift required to build this package.
|
|
||||||
|
|
||||||
import PackageDescription
|
|
||||||
|
|
||||||
let package = Package(
|
|
||||||
name: "MessagePack",
|
|
||||||
products: [
|
|
||||||
// Products define the executables and libraries produced by a package, and make them visible to other packages.
|
|
||||||
.library(
|
|
||||||
name: "MessagePack",
|
|
||||||
targets: ["MessagePack"]),
|
|
||||||
],
|
|
||||||
dependencies: [
|
|
||||||
// Dependencies declare other packages that this package depends on.
|
|
||||||
// .package(url: /* package url */, from: "1.0.0"),
|
|
||||||
],
|
|
||||||
targets: [
|
|
||||||
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
|
|
||||||
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
|
|
||||||
.target(
|
|
||||||
name: "MessagePack",
|
|
||||||
dependencies: []),
|
|
||||||
.testTarget(
|
|
||||||
name: "MessagePackTests",
|
|
||||||
dependencies: ["MessagePack"]),
|
|
||||||
]
|
|
||||||
)
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
# MessagePack
|
|
||||||
|
|
||||||
[![Build Status][build status badge]][build status]
|
|
||||||
|
|
||||||
A [MessagePack](https://msgpack.org/) encoder and decoder for `Codable` types.
|
|
||||||
|
|
||||||
This functionality is discussed in Chapter 7 of
|
|
||||||
[Flight School Guide to Swift Codable](https://flight.school/books/codable).
|
|
||||||
|
|
||||||
## Requirements
|
|
||||||
|
|
||||||
- Swift 4.2+
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
### Encoding Messages
|
|
||||||
|
|
||||||
```swift
|
|
||||||
import MessagePack
|
|
||||||
|
|
||||||
let encoder = MessagePackEncoder()
|
|
||||||
let value = try! encoder.encode(["a": 1, "b": 2, "c": 3])
|
|
||||||
// [0x83, 0xA1, 0x62, 0x02, 0xA1, 0x61, 0x01, 0xA1, 0x63, 0x03]
|
|
||||||
```
|
|
||||||
|
|
||||||
### Decoding Messages
|
|
||||||
|
|
||||||
```swift
|
|
||||||
import MessagePack
|
|
||||||
|
|
||||||
let decoder = MessagePackDecoder()
|
|
||||||
let data = Data(bytes: [0xCB, 0x40, 0x09, 0x21, 0xF9, 0xF0, 0x1B, 0x86, 0x6E])
|
|
||||||
let value = try! decoder.decode(Double.self, from: data)
|
|
||||||
// 3.14159
|
|
||||||
```
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
### Swift Package Manager
|
|
||||||
|
|
||||||
Add the MessagePack package to your target dependencies in `Package.swift`:
|
|
||||||
|
|
||||||
```swift
|
|
||||||
import PackageDescription
|
|
||||||
|
|
||||||
let package = Package(
|
|
||||||
name: "YourProject",
|
|
||||||
dependencies: [
|
|
||||||
.package(
|
|
||||||
url: "https://github.com/Flight-School/MessagePack",
|
|
||||||
from: "1.2.3"
|
|
||||||
),
|
|
||||||
]
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
Then run the `swift build` command to build your project.
|
|
||||||
|
|
||||||
### CocoaPods
|
|
||||||
|
|
||||||
You can install `MessagePack` via CocoaPods,
|
|
||||||
by adding the following line to your `Podfile`:
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
pod 'MessagePack-FlightSchool', '~> 1.2.4'
|
|
||||||
```
|
|
||||||
|
|
||||||
Run the `pod install` command to download the library
|
|
||||||
and integrate it into your Xcode project.
|
|
||||||
|
|
||||||
> **Note**
|
|
||||||
> The module name for this library is "MessagePack" ---
|
|
||||||
> that is, to use it, you add `import MessagePack` to the top of your Swift code
|
|
||||||
> just as you would by any other installation method.
|
|
||||||
> The pod is called "MessagePack-FlightSchool"
|
|
||||||
> because there's an existing pod with the name "MessagePack".
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT
|
|
||||||
|
|
||||||
## Contact
|
|
||||||
|
|
||||||
Mattt ([@mattt](https://twitter.com/mattt))
|
|
||||||
|
|
||||||
[build status]: https://github.com/Flight-School/MessagePack/actions?query=workflow%3ACI
|
|
||||||
[build status badge]: https://github.com/Flight-School/MessagePack/workflows/CI/badge.svg
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
struct AnyCodingKey: CodingKey, Equatable {
|
|
||||||
var stringValue: String
|
|
||||||
var intValue: Int?
|
|
||||||
|
|
||||||
init?(stringValue: String) {
|
|
||||||
self.stringValue = stringValue
|
|
||||||
self.intValue = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
init?(intValue: Int) {
|
|
||||||
self.stringValue = "\(intValue)"
|
|
||||||
self.intValue = intValue
|
|
||||||
}
|
|
||||||
|
|
||||||
init<Key>(_ base: Key) where Key : CodingKey {
|
|
||||||
if let intValue = base.intValue {
|
|
||||||
self.init(intValue: intValue)!
|
|
||||||
} else {
|
|
||||||
self.init(stringValue: base.stringValue)!
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension AnyCodingKey: Hashable {
|
|
||||||
var hashValue: Int {
|
|
||||||
return self.intValue?.hashValue ?? self.stringValue.hashValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
import Foundation
|
|
||||||
|
|
||||||
struct Box<Value> {
|
|
||||||
let value: Value
|
|
||||||
init(_ value: Value) {
|
|
||||||
self.value = value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension Box: Encodable where Value: Encodable {
|
|
||||||
func encode(to encoder: Encoder) throws {
|
|
||||||
try self.value.encode(to: encoder)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension Box: Decodable where Value: Decodable {
|
|
||||||
init(from decoder: Decoder) throws {
|
|
||||||
self.init(try Value(from: decoder))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension Box where Value == Data {
|
|
||||||
init(from decoder: Decoder) throws {
|
|
||||||
let container = try decoder.singleValueContainer()
|
|
||||||
self.init(try container.decode(Value.self))
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(to encoder: Encoder) throws {
|
|
||||||
var container = encoder.singleValueContainer()
|
|
||||||
try container.encode(self.value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension Box where Value == Date {
|
|
||||||
init(from decoder: Decoder) throws {
|
|
||||||
let container = try decoder.singleValueContainer()
|
|
||||||
self.init(try container.decode(Value.self))
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(to encoder: Encoder) throws {
|
|
||||||
var container = encoder.singleValueContainer()
|
|
||||||
try container.encode(self.value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
import Foundation
|
|
||||||
|
|
||||||
public struct DataSpec {
|
|
||||||
let name: String
|
|
||||||
let isObj: Bool
|
|
||||||
let isArray: Bool
|
|
||||||
let dataSpecBuilder: DataSpecBuilder?
|
|
||||||
|
|
||||||
init(_ name: String, _ isObj: Bool, _ isArray: Bool, _ dataSpecBuilder: DataSpecBuilder?) {
|
|
||||||
self.name = name
|
|
||||||
self.isObj = isObj
|
|
||||||
self.isArray = isArray
|
|
||||||
self.dataSpecBuilder = dataSpecBuilder
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class DataSpecBuilder : NSCopying {
|
|
||||||
var specs: [DataSpec] = []
|
|
||||||
var specsIterator: IndexingIterator<[DataSpec]>
|
|
||||||
|
|
||||||
init() {
|
|
||||||
specsIterator = IndexingIterator(_elements: [])
|
|
||||||
}
|
|
||||||
|
|
||||||
func append(_ name: String) -> DataSpecBuilder {
|
|
||||||
return append(DataSpec(name, false, false, nil))
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendObj(_ name: String, _ dataSpecBuilder: DataSpecBuilder) -> DataSpecBuilder {
|
|
||||||
return append(DataSpec(name, true, false, dataSpecBuilder))
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendArray(_ name: String) -> DataSpecBuilder {
|
|
||||||
return append(DataSpec(name, false, true, nil))
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendArray(_ name: String, _ dataSpecBuilder: DataSpecBuilder) -> DataSpecBuilder {
|
|
||||||
return append(DataSpec(name, false, true, dataSpecBuilder))
|
|
||||||
}
|
|
||||||
|
|
||||||
func append(_ spec: DataSpec) -> DataSpecBuilder {
|
|
||||||
specs.append(spec)
|
|
||||||
return self
|
|
||||||
}
|
|
||||||
|
|
||||||
func build() -> DataSpecBuilder {
|
|
||||||
specsIterator = specs.makeIterator()
|
|
||||||
return self
|
|
||||||
}
|
|
||||||
|
|
||||||
func next() -> DataSpec {
|
|
||||||
return specsIterator.next()!
|
|
||||||
}
|
|
||||||
|
|
||||||
public func copy(with zone: NSZone? = nil) -> Any {
|
|
||||||
let b = DataSpecBuilder()
|
|
||||||
b.specs = specs
|
|
||||||
return b.build()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,178 +0,0 @@
|
|||||||
import Foundation
|
|
||||||
|
|
||||||
extension _MessagePackDecoder {
|
|
||||||
final class KeyedContainer<Key> where Key: CodingKey {
|
|
||||||
lazy var nestedContainers: [String: MessagePackDecodingContainer] = {
|
|
||||||
guard let count = self.count else {
|
|
||||||
return [:]
|
|
||||||
}
|
|
||||||
|
|
||||||
var nestedContainers: [String: MessagePackDecodingContainer] = [:]
|
|
||||||
|
|
||||||
let unkeyedContainer = UnkeyedContainer(data: self.data.suffix(from: self.index), codingPath: self.codingPath, userInfo: self.userInfo)
|
|
||||||
if currentSpec != nil && currentSpec!.isObj {
|
|
||||||
unkeyedContainer.count = count
|
|
||||||
} else {
|
|
||||||
unkeyedContainer.count = count * 2
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
|
||||||
var iterator = unkeyedContainer.nestedContainers.makeIterator()
|
|
||||||
|
|
||||||
for _ in 0..<count {
|
|
||||||
var key: String = ""
|
|
||||||
if currentSpec == nil || !currentSpec!.isObj {
|
|
||||||
guard let keyContainer = iterator.next() as? _MessagePackDecoder.SingleValueContainer else {
|
|
||||||
fatalError() // FIXME
|
|
||||||
}
|
|
||||||
|
|
||||||
key = try keyContainer.decode(String.self)
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let container = iterator.next() else {
|
|
||||||
fatalError() // FIXME
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if currentSpec != nil && currentSpec!.isObj {
|
|
||||||
key = container.currentSpec!.name
|
|
||||||
}
|
|
||||||
|
|
||||||
container.codingPath += [AnyCodingKey(stringValue: key)!]
|
|
||||||
nestedContainers[key] = container
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
fatalError("\(error)") // FIXME
|
|
||||||
}
|
|
||||||
|
|
||||||
self.index = unkeyedContainer.index
|
|
||||||
|
|
||||||
return nestedContainers
|
|
||||||
}()
|
|
||||||
|
|
||||||
lazy var count: Int? = {
|
|
||||||
do {
|
|
||||||
let format = try self.readByte()
|
|
||||||
|
|
||||||
if currentSpec != nil && currentSpec!.isObj && 0x90...0x9f ~= format {
|
|
||||||
return Int(format & 0x0F)
|
|
||||||
}
|
|
||||||
|
|
||||||
switch format {
|
|
||||||
case 0x80...0x8f:
|
|
||||||
return Int(format & 0x0F)
|
|
||||||
case 0xde:
|
|
||||||
return Int(try read(UInt16.self))
|
|
||||||
case 0xdf:
|
|
||||||
return Int(try read(UInt32.self))
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
var data: Data
|
|
||||||
var index: Data.Index
|
|
||||||
var codingPath: [CodingKey]
|
|
||||||
var userInfo: [CodingUserInfoKey: Any]
|
|
||||||
var currentSpec: DataSpec?
|
|
||||||
|
|
||||||
func nestedCodingPath(forKey key: CodingKey) -> [CodingKey] {
|
|
||||||
return self.codingPath + [key]
|
|
||||||
}
|
|
||||||
|
|
||||||
init(data: Data, codingPath: [CodingKey], userInfo: [CodingUserInfoKey : Any]) {
|
|
||||||
self.codingPath = codingPath
|
|
||||||
self.userInfo = userInfo
|
|
||||||
self.data = data
|
|
||||||
self.index = self.data.startIndex
|
|
||||||
}
|
|
||||||
|
|
||||||
func checkCanDecodeValue(forKey key: Key) throws {
|
|
||||||
guard self.contains(key) else {
|
|
||||||
let context = DecodingError.Context(codingPath: self.codingPath, debugDescription: "key not found: \(key)")
|
|
||||||
throw DecodingError.keyNotFound(key, context)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackDecoder.KeyedContainer: KeyedDecodingContainerProtocol {
|
|
||||||
var allKeys: [Key] {
|
|
||||||
return self.nestedContainers.keys.map{ Key(stringValue: $0)! }
|
|
||||||
}
|
|
||||||
|
|
||||||
func contains(_ key: Key) -> Bool {
|
|
||||||
return self.nestedContainers.keys.contains(key.stringValue)
|
|
||||||
}
|
|
||||||
|
|
||||||
func decodeNil(forKey key: Key) throws -> Bool {
|
|
||||||
try checkCanDecodeValue(forKey: key)
|
|
||||||
|
|
||||||
let nestedContainer = self.nestedContainers[key.stringValue]
|
|
||||||
|
|
||||||
switch nestedContainer {
|
|
||||||
case let singleValueContainer as _MessagePackDecoder.SingleValueContainer:
|
|
||||||
return singleValueContainer.decodeNil()
|
|
||||||
case is _MessagePackDecoder.UnkeyedContainer,
|
|
||||||
is _MessagePackDecoder.KeyedContainer<AnyCodingKey>:
|
|
||||||
return false
|
|
||||||
default:
|
|
||||||
let context = DecodingError.Context(codingPath: self.codingPath, debugDescription: "cannot decode nil for key: \(key)")
|
|
||||||
throw DecodingError.typeMismatch(Any?.self, context)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func decode<T>(_ type: T.Type, forKey key: Key) throws -> T where T : Decodable {
|
|
||||||
try checkCanDecodeValue(forKey: key)
|
|
||||||
|
|
||||||
let container = self.nestedContainers[key.stringValue]!
|
|
||||||
let decoder = MessagePackDecoder()
|
|
||||||
|
|
||||||
if userInfo.keys.contains(MessagePackDecoder.dataSpecKey) {
|
|
||||||
decoder.userInfo[MessagePackDecoder.dataSpecKey] = container.currentSpec!.dataSpecBuilder?.copy() as? DataSpecBuilder
|
|
||||||
if container.currentSpec!.isArray {
|
|
||||||
decoder.userInfo[MessagePackDecoder.isArrayDataSpecKey] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let value = try decoder.decode(T.self, from: container.data)
|
|
||||||
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
|
|
||||||
func nestedUnkeyedContainer(forKey key: Key) throws -> UnkeyedDecodingContainer {
|
|
||||||
try checkCanDecodeValue(forKey: key)
|
|
||||||
|
|
||||||
guard let unkeyedContainer = self.nestedContainers[key.stringValue] as? _MessagePackDecoder.UnkeyedContainer else {
|
|
||||||
throw DecodingError.dataCorruptedError(forKey: key, in: self, debugDescription: "cannot decode nested container for key: \(key)")
|
|
||||||
}
|
|
||||||
|
|
||||||
return unkeyedContainer
|
|
||||||
}
|
|
||||||
|
|
||||||
func nestedContainer<NestedKey>(keyedBy type: NestedKey.Type, forKey key: Key) throws -> KeyedDecodingContainer<NestedKey> where NestedKey : CodingKey {
|
|
||||||
try checkCanDecodeValue(forKey: key)
|
|
||||||
|
|
||||||
guard let keyedContainer = self.nestedContainers[key.stringValue] as? _MessagePackDecoder.KeyedContainer<NestedKey> else {
|
|
||||||
throw DecodingError.dataCorruptedError(forKey: key, in: self, debugDescription: "cannot decode nested container for key: \(key)")
|
|
||||||
}
|
|
||||||
|
|
||||||
return KeyedDecodingContainer(keyedContainer)
|
|
||||||
}
|
|
||||||
|
|
||||||
func superDecoder() throws -> Decoder {
|
|
||||||
return _MessagePackDecoder(data: self.data)
|
|
||||||
}
|
|
||||||
|
|
||||||
func superDecoder(forKey key: Key) throws -> Decoder {
|
|
||||||
let decoder = _MessagePackDecoder(data: self.data)
|
|
||||||
decoder.codingPath = [key]
|
|
||||||
|
|
||||||
return decoder
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackDecoder.KeyedContainer: MessagePackDecodingContainer {}
|
|
||||||
@@ -1,168 +0,0 @@
|
|||||||
import Foundation
|
|
||||||
|
|
||||||
/**
|
|
||||||
An object that decodes instances of a data type from MessagePack objects.
|
|
||||||
*/
|
|
||||||
final public class MessagePackDecoder {
|
|
||||||
public init() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
A dictionary you use to customize the decoding process
|
|
||||||
by providing contextual information.
|
|
||||||
*/
|
|
||||||
public var userInfo: [CodingUserInfoKey : Any] = [:]
|
|
||||||
|
|
||||||
/**
|
|
||||||
Returns a value of the type you specify,
|
|
||||||
decoded from a MessagePack object.
|
|
||||||
|
|
||||||
- Parameters:
|
|
||||||
- type: The type of the value to decode
|
|
||||||
from the supplied MessagePack object.
|
|
||||||
- data: The MessagePack object to decode.
|
|
||||||
- Throws: `DecodingError.dataCorrupted(_:)`
|
|
||||||
if the data is not valid MessagePack.
|
|
||||||
*/
|
|
||||||
public func decode<T>(_ type: T.Type, from data: Data) throws -> T where T : Decodable {
|
|
||||||
let decoder = _MessagePackDecoder(data: data)
|
|
||||||
decoder.userInfo = self.userInfo
|
|
||||||
decoder.userInfo[MessagePackDecoder.nonMatchingFloatDecodingStrategyKey] = nonMatchingFloatDecodingStrategy
|
|
||||||
|
|
||||||
switch type {
|
|
||||||
case is Data.Type:
|
|
||||||
let box = try Box<Data>(from: decoder)
|
|
||||||
return box.value as! T
|
|
||||||
case is Date.Type:
|
|
||||||
let box = try Box<Date>(from: decoder)
|
|
||||||
return box.value as! T
|
|
||||||
default:
|
|
||||||
return try T(from: decoder)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
The strategy used by a decoder when it encounters format mismatches for floating point values.
|
|
||||||
*/
|
|
||||||
public var nonMatchingFloatDecodingStrategy: NonMatchingFloatDecodingStrategy = .strict
|
|
||||||
|
|
||||||
/**
|
|
||||||
The strategies for decoding floating point values when their format doesn't match.
|
|
||||||
*/
|
|
||||||
public enum NonMatchingFloatDecodingStrategy {
|
|
||||||
|
|
||||||
/// Throws a DecodingError.typeMismatch
|
|
||||||
case strict
|
|
||||||
|
|
||||||
/// Performs a cast
|
|
||||||
case cast
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static var nonMatchingFloatDecodingStrategyKey: CodingUserInfoKey {
|
|
||||||
return CodingUserInfoKey(rawValue: "nonMatchingFloatDecodingStrategyKey")!
|
|
||||||
}
|
|
||||||
|
|
||||||
static var dataSpecKey : CodingUserInfoKey {
|
|
||||||
return CodingUserInfoKey(rawValue: "dataSpecKey")!
|
|
||||||
}
|
|
||||||
|
|
||||||
static var isArrayDataSpecKey : CodingUserInfoKey {
|
|
||||||
return CodingUserInfoKey(rawValue: "isArrayDataSpecKey")!
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - TopLevelDecoder
|
|
||||||
|
|
||||||
#if canImport(Combine)
|
|
||||||
import Combine
|
|
||||||
|
|
||||||
extension MessagePackDecoder: TopLevelDecoder {
|
|
||||||
public typealias Input = Data
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// MARK: -
|
|
||||||
|
|
||||||
final class _MessagePackDecoder {
|
|
||||||
var codingPath: [CodingKey] = []
|
|
||||||
|
|
||||||
var userInfo: [CodingUserInfoKey : Any] = [:]
|
|
||||||
|
|
||||||
var container: MessagePackDecodingContainer?
|
|
||||||
fileprivate var data: Data
|
|
||||||
|
|
||||||
init(data: Data) {
|
|
||||||
self.data = data
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackDecoder: Decoder {
|
|
||||||
fileprivate func assertCanCreateContainer() {
|
|
||||||
precondition(self.container == nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func container<Key>(keyedBy type: Key.Type) -> KeyedDecodingContainer<Key> where Key : CodingKey {
|
|
||||||
assertCanCreateContainer()
|
|
||||||
|
|
||||||
let container = KeyedContainer<Key>(data: self.data, codingPath: self.codingPath, userInfo: self.userInfo)
|
|
||||||
|
|
||||||
if userInfo.keys.contains(MessagePackDecoder.dataSpecKey) {
|
|
||||||
container.currentSpec = DataSpec("", true, false, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
self.container = container
|
|
||||||
|
|
||||||
return KeyedDecodingContainer(container)
|
|
||||||
}
|
|
||||||
|
|
||||||
func unkeyedContainer() -> UnkeyedDecodingContainer {
|
|
||||||
assertCanCreateContainer()
|
|
||||||
|
|
||||||
let container = UnkeyedContainer(data: self.data, codingPath: self.codingPath, userInfo: self.userInfo)
|
|
||||||
self.container = container
|
|
||||||
|
|
||||||
return container
|
|
||||||
}
|
|
||||||
|
|
||||||
func singleValueContainer() -> SingleValueDecodingContainer {
|
|
||||||
assertCanCreateContainer()
|
|
||||||
|
|
||||||
let container = SingleValueContainer(data: self.data, codingPath: self.codingPath, userInfo: self.userInfo)
|
|
||||||
self.container = container
|
|
||||||
|
|
||||||
return container
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protocol MessagePackDecodingContainer: class {
|
|
||||||
var codingPath: [CodingKey] { get set }
|
|
||||||
|
|
||||||
var userInfo: [CodingUserInfoKey : Any] { get }
|
|
||||||
|
|
||||||
var data: Data { get set }
|
|
||||||
var index: Data.Index { get set }
|
|
||||||
|
|
||||||
var currentSpec: DataSpec? { get set }
|
|
||||||
}
|
|
||||||
|
|
||||||
extension MessagePackDecodingContainer {
|
|
||||||
func readByte() throws -> UInt8 {
|
|
||||||
return try read(1).first!
|
|
||||||
}
|
|
||||||
|
|
||||||
func read(_ length: Int) throws -> Data {
|
|
||||||
let nextIndex = self.index.advanced(by: length)
|
|
||||||
guard nextIndex <= self.data.endIndex else {
|
|
||||||
let context = DecodingError.Context(codingPath: self.codingPath, debugDescription: "Unexpected end of data")
|
|
||||||
throw DecodingError.dataCorrupted(context)
|
|
||||||
}
|
|
||||||
defer { self.index = nextIndex }
|
|
||||||
|
|
||||||
return self.data.subdata(in: self.index..<nextIndex)
|
|
||||||
}
|
|
||||||
|
|
||||||
func read<T>(_ type: T.Type) throws -> T where T : FixedWidthInteger {
|
|
||||||
let stride = MemoryLayout<T>.stride
|
|
||||||
let bytes = [UInt8](try read(stride))
|
|
||||||
return T(bytes: bytes)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,226 +0,0 @@
|
|||||||
import Foundation
|
|
||||||
|
|
||||||
#if os(Linux)
|
|
||||||
let NSEC_PER_SEC: UInt64 = 1000000000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extension _MessagePackDecoder {
|
|
||||||
final class SingleValueContainer {
|
|
||||||
var codingPath: [CodingKey]
|
|
||||||
var userInfo: [CodingUserInfoKey: Any]
|
|
||||||
var data: Data
|
|
||||||
var index: Data.Index
|
|
||||||
var currentSpec: DataSpec?
|
|
||||||
|
|
||||||
init(data: Data, codingPath: [CodingKey], userInfo: [CodingUserInfoKey : Any]) {
|
|
||||||
self.codingPath = codingPath
|
|
||||||
self.userInfo = userInfo
|
|
||||||
self.data = data
|
|
||||||
self.index = self.data.startIndex
|
|
||||||
}
|
|
||||||
|
|
||||||
func checkCanDecode<T>(_ type: T.Type, format: UInt8) throws {
|
|
||||||
guard self.index <= self.data.endIndex else {
|
|
||||||
throw DecodingError.dataCorruptedError(in: self, debugDescription: "Unexpected end of data")
|
|
||||||
}
|
|
||||||
|
|
||||||
guard self.data[self.index] == format else {
|
|
||||||
let context = DecodingError.Context(codingPath: self.codingPath, debugDescription: "Invalid format: \(format)")
|
|
||||||
throw DecodingError.typeMismatch(type, context)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var nonMatchingFloatDecodingStrategy: MessagePackDecoder.NonMatchingFloatDecodingStrategy {
|
|
||||||
return userInfo[MessagePackDecoder.nonMatchingFloatDecodingStrategyKey] as? MessagePackDecoder.NonMatchingFloatDecodingStrategy ?? .strict
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackDecoder.SingleValueContainer: SingleValueDecodingContainer {
|
|
||||||
func decodeNil() -> Bool {
|
|
||||||
let format = try? readByte()
|
|
||||||
return format == 0xc0
|
|
||||||
}
|
|
||||||
|
|
||||||
func decode(_ type: Bool.Type) throws -> Bool {
|
|
||||||
let format = try readByte()
|
|
||||||
switch format {
|
|
||||||
case 0xc2: return false
|
|
||||||
case 0xc3: return true
|
|
||||||
default:
|
|
||||||
let context = DecodingError.Context(codingPath: self.codingPath, debugDescription: "Invalid format: \(format)")
|
|
||||||
throw DecodingError.typeMismatch(Bool.self, context)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func decode(_ type: String.Type) throws -> String {
|
|
||||||
let length: Int
|
|
||||||
let format = try readByte()
|
|
||||||
switch format {
|
|
||||||
case 0xa0...0xbf:
|
|
||||||
length = Int(format - 0xa0)
|
|
||||||
case 0xd9:
|
|
||||||
length = Int(try read(UInt8.self))
|
|
||||||
case 0xda:
|
|
||||||
length = Int(try read(UInt16.self))
|
|
||||||
case 0xdb:
|
|
||||||
length = Int(try read(UInt32.self))
|
|
||||||
default:
|
|
||||||
throw DecodingError.dataCorruptedError(in: self, debugDescription: "Invalid format for String length: \(format)")
|
|
||||||
}
|
|
||||||
|
|
||||||
let data = try read(length)
|
|
||||||
guard let string = String(data: data, encoding: .utf8) else {
|
|
||||||
let context = DecodingError.Context(codingPath: self.codingPath, debugDescription: "Couldn't decode string with UTF-8 encoding")
|
|
||||||
throw DecodingError.dataCorrupted(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
return string
|
|
||||||
}
|
|
||||||
|
|
||||||
func decode(_ type: Double.Type) throws -> Double {
|
|
||||||
let format = try readByte()
|
|
||||||
switch format {
|
|
||||||
case 0xca:
|
|
||||||
switch nonMatchingFloatDecodingStrategy {
|
|
||||||
case .strict:
|
|
||||||
break
|
|
||||||
case .cast:
|
|
||||||
let bitPattern = try read(UInt32.self)
|
|
||||||
return Double(Float(bitPattern: bitPattern))
|
|
||||||
}
|
|
||||||
case 0xcb:
|
|
||||||
let bitPattern = try read(UInt64.self)
|
|
||||||
return Double(bitPattern: bitPattern)
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
let context = DecodingError.Context(codingPath: self.codingPath, debugDescription: "Invalid format: \(format)")
|
|
||||||
throw DecodingError.typeMismatch(Double.self, context)
|
|
||||||
}
|
|
||||||
|
|
||||||
func decode(_ type: Float.Type) throws -> Float {
|
|
||||||
let format = try readByte()
|
|
||||||
switch format {
|
|
||||||
case 0xca:
|
|
||||||
let bitPattern = try read(UInt32.self)
|
|
||||||
return Float(bitPattern: bitPattern)
|
|
||||||
case 0xcb:
|
|
||||||
switch nonMatchingFloatDecodingStrategy {
|
|
||||||
case .strict:
|
|
||||||
break
|
|
||||||
case .cast:
|
|
||||||
let bitPattern = try read(UInt64.self)
|
|
||||||
return Float(Double(bitPattern: bitPattern))
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
let context = DecodingError.Context(codingPath: self.codingPath, debugDescription: "Invalid format: \(format)")
|
|
||||||
throw DecodingError.typeMismatch(Float.self, context)
|
|
||||||
}
|
|
||||||
|
|
||||||
func decode<T>(_ type: T.Type) throws -> T where T : BinaryInteger & Decodable {
|
|
||||||
let format = try readByte()
|
|
||||||
var t: T?
|
|
||||||
|
|
||||||
switch format {
|
|
||||||
case 0x00...0x7f:
|
|
||||||
t = T(format)
|
|
||||||
case 0xcc:
|
|
||||||
t = T(exactly: try read(UInt8.self))
|
|
||||||
case 0xcd:
|
|
||||||
t = T(exactly: try read(UInt16.self))
|
|
||||||
case 0xce:
|
|
||||||
t = T(exactly: try read(UInt32.self))
|
|
||||||
case 0xcf:
|
|
||||||
t = T(exactly: try read(UInt64.self))
|
|
||||||
case 0xd0:
|
|
||||||
t = T(exactly: try read(Int8.self))
|
|
||||||
case 0xd1:
|
|
||||||
t = T(exactly: try read(Int16.self))
|
|
||||||
case 0xd2:
|
|
||||||
t = T(exactly: try read(Int32.self))
|
|
||||||
case 0xd3:
|
|
||||||
t = T(exactly: try read(Int64.self))
|
|
||||||
case 0xe0...0xff:
|
|
||||||
t = T(exactly: Int8(bitPattern: format))
|
|
||||||
default:
|
|
||||||
t = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let value = t else {
|
|
||||||
let context = DecodingError.Context(codingPath: self.codingPath, debugDescription: "Invalid format: \(format)")
|
|
||||||
throw DecodingError.typeMismatch(T.self, context)
|
|
||||||
}
|
|
||||||
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
|
|
||||||
func decode(_ type: Date.Type) throws -> Date {
|
|
||||||
let format = try readByte()
|
|
||||||
|
|
||||||
var seconds: TimeInterval
|
|
||||||
var nanoseconds: TimeInterval
|
|
||||||
|
|
||||||
switch format {
|
|
||||||
case 0xd6:
|
|
||||||
_ = try read(Int8.self) // -1
|
|
||||||
nanoseconds = 0
|
|
||||||
seconds = TimeInterval(try read(UInt32.self))
|
|
||||||
case 0xd7:
|
|
||||||
_ = try read(Int8.self) // -1
|
|
||||||
let bitPattern = try read(UInt64.self)
|
|
||||||
nanoseconds = TimeInterval(UInt32(bitPattern >> 34))
|
|
||||||
seconds = TimeInterval(UInt32(bitPattern & 0x03_FF_FF_FF_FF))
|
|
||||||
case 0xc7:
|
|
||||||
_ = try read(Int8.self) // 12
|
|
||||||
_ = try read(Int8.self) // -1
|
|
||||||
nanoseconds = TimeInterval(try read(UInt32.self))
|
|
||||||
seconds = TimeInterval(try read(Int64.self))
|
|
||||||
default:
|
|
||||||
let context = DecodingError.Context(codingPath: self.codingPath, debugDescription: "Invalid format: \(format)")
|
|
||||||
throw DecodingError.typeMismatch(Date.self, context)
|
|
||||||
}
|
|
||||||
|
|
||||||
let timeInterval = TimeInterval(seconds) + nanoseconds / Double(NSEC_PER_SEC)
|
|
||||||
|
|
||||||
return Date(timeIntervalSince1970: timeInterval)
|
|
||||||
}
|
|
||||||
|
|
||||||
func decode(_ type: Data.Type) throws -> Data {
|
|
||||||
let length: Int
|
|
||||||
let format = try readByte()
|
|
||||||
switch format {
|
|
||||||
case 0xc4:
|
|
||||||
length = Int(try read(UInt8.self))
|
|
||||||
case 0xc5:
|
|
||||||
length = Int(try read(UInt16.self))
|
|
||||||
case 0xc6:
|
|
||||||
length = Int(try read(UInt32.self))
|
|
||||||
default:
|
|
||||||
throw DecodingError.dataCorruptedError(in: self, debugDescription: "Invalid format for Data length: \(format)")
|
|
||||||
}
|
|
||||||
|
|
||||||
return self.data.subdata(in: self.index..<self.index.advanced(by: length))
|
|
||||||
}
|
|
||||||
|
|
||||||
func decode<T>(_ type: T.Type) throws -> T where T : Decodable {
|
|
||||||
switch type {
|
|
||||||
case is Data.Type:
|
|
||||||
return try decode(Data.self) as! T
|
|
||||||
case is Date.Type:
|
|
||||||
return try decode(Date.self) as! T
|
|
||||||
default:
|
|
||||||
let decoder = _MessagePackDecoder(data: self.data)
|
|
||||||
let value = try T(from: decoder)
|
|
||||||
if let nextIndex = decoder.container?.index {
|
|
||||||
self.index = nextIndex
|
|
||||||
}
|
|
||||||
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackDecoder.SingleValueContainer: MessagePackDecodingContainer {}
|
|
||||||
@@ -1,235 +0,0 @@
|
|||||||
import Foundation
|
|
||||||
|
|
||||||
extension _MessagePackDecoder {
|
|
||||||
final class UnkeyedContainer {
|
|
||||||
var codingPath: [CodingKey]
|
|
||||||
|
|
||||||
var nestedCodingPath: [CodingKey] {
|
|
||||||
return self.codingPath + [AnyCodingKey(intValue: self.count ?? 0)!]
|
|
||||||
}
|
|
||||||
|
|
||||||
var userInfo: [CodingUserInfoKey: Any]
|
|
||||||
|
|
||||||
var data: Data
|
|
||||||
var index: Data.Index
|
|
||||||
var currentSpec: DataSpec?
|
|
||||||
|
|
||||||
lazy var count: Int? = {
|
|
||||||
do {
|
|
||||||
let format = try self.readByte()
|
|
||||||
switch format {
|
|
||||||
case 0x90...0x9f:
|
|
||||||
return Int(format & 0x0F)
|
|
||||||
case 0xdc:
|
|
||||||
return Int(try read(UInt16.self))
|
|
||||||
case 0xdd:
|
|
||||||
return Int(try read(UInt32.self))
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
var currentIndex: Int = 0
|
|
||||||
|
|
||||||
lazy var nestedContainers: [MessagePackDecodingContainer] = {
|
|
||||||
guard let count = self.count else {
|
|
||||||
return []
|
|
||||||
}
|
|
||||||
|
|
||||||
var nestedContainers: [MessagePackDecodingContainer] = []
|
|
||||||
|
|
||||||
do {
|
|
||||||
for _ in 0..<count {
|
|
||||||
let container = try self.decodeContainer()
|
|
||||||
nestedContainers.append(container)
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
fatalError("\(error)") // FIXME
|
|
||||||
}
|
|
||||||
|
|
||||||
self.currentIndex = 0
|
|
||||||
|
|
||||||
return nestedContainers
|
|
||||||
}()
|
|
||||||
|
|
||||||
init(data: Data, codingPath: [CodingKey], userInfo: [CodingUserInfoKey : Any]) {
|
|
||||||
self.codingPath = codingPath
|
|
||||||
self.userInfo = userInfo
|
|
||||||
self.data = data
|
|
||||||
self.index = self.data.startIndex
|
|
||||||
}
|
|
||||||
|
|
||||||
var isAtEnd: Bool {
|
|
||||||
guard let count = self.count else {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return currentIndex >= count
|
|
||||||
}
|
|
||||||
|
|
||||||
func checkCanDecodeValue() throws {
|
|
||||||
guard !self.isAtEnd else {
|
|
||||||
throw DecodingError.dataCorruptedError(in: self, debugDescription: "Unexpected end of data")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackDecoder.UnkeyedContainer: UnkeyedDecodingContainer {
|
|
||||||
func decodeNil() throws -> Bool {
|
|
||||||
try checkCanDecodeValue()
|
|
||||||
defer { self.currentIndex += 1 }
|
|
||||||
|
|
||||||
let nestedContainer = self.nestedContainers[self.currentIndex]
|
|
||||||
|
|
||||||
switch nestedContainer {
|
|
||||||
case let singleValueContainer as _MessagePackDecoder.SingleValueContainer:
|
|
||||||
return singleValueContainer.decodeNil()
|
|
||||||
case is _MessagePackDecoder.UnkeyedContainer,
|
|
||||||
is _MessagePackDecoder.KeyedContainer<AnyCodingKey>:
|
|
||||||
return false
|
|
||||||
default:
|
|
||||||
let context = DecodingError.Context(codingPath: self.codingPath, debugDescription: "cannot decode nil for index: \(self.currentIndex)")
|
|
||||||
throw DecodingError.typeMismatch(Any?.self, context)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func decode<T>(_ type: T.Type) throws -> T where T : Decodable {
|
|
||||||
try checkCanDecodeValue()
|
|
||||||
defer { self.currentIndex += 1 }
|
|
||||||
|
|
||||||
if userInfo.keys.contains(MessagePackDecoder.isArrayDataSpecKey) {
|
|
||||||
currentSpec = DataSpec("", false, true, (userInfo[MessagePackDecoder.dataSpecKey] as? DataSpecBuilder)?.copy() as? DataSpecBuilder)
|
|
||||||
}
|
|
||||||
|
|
||||||
let container = self.nestedContainers[self.currentIndex]
|
|
||||||
let decoder = MessagePackDecoder()
|
|
||||||
|
|
||||||
if userInfo.keys.contains(MessagePackDecoder.dataSpecKey) {
|
|
||||||
decoder.userInfo[MessagePackDecoder.dataSpecKey] = (userInfo[MessagePackDecoder.dataSpecKey] as? DataSpecBuilder)?.copy() as? DataSpecBuilder
|
|
||||||
}
|
|
||||||
|
|
||||||
let value = try decoder.decode(T.self, from: container.data)
|
|
||||||
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
|
|
||||||
func nestedUnkeyedContainer() throws -> UnkeyedDecodingContainer {
|
|
||||||
try checkCanDecodeValue()
|
|
||||||
defer { self.currentIndex += 1 }
|
|
||||||
|
|
||||||
let container = self.nestedContainers[self.currentIndex] as! _MessagePackDecoder.UnkeyedContainer
|
|
||||||
|
|
||||||
return container
|
|
||||||
}
|
|
||||||
|
|
||||||
func nestedContainer<NestedKey>(keyedBy type: NestedKey.Type) throws -> KeyedDecodingContainer<NestedKey> where NestedKey : CodingKey {
|
|
||||||
try checkCanDecodeValue()
|
|
||||||
defer { self.currentIndex += 1 }
|
|
||||||
|
|
||||||
let container = self.nestedContainers[self.currentIndex] as! _MessagePackDecoder.KeyedContainer<NestedKey>
|
|
||||||
|
|
||||||
return KeyedDecodingContainer(container)
|
|
||||||
}
|
|
||||||
|
|
||||||
func superDecoder() throws -> Decoder {
|
|
||||||
return _MessagePackDecoder(data: self.data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackDecoder.UnkeyedContainer {
|
|
||||||
func decodeContainer() throws -> MessagePackDecodingContainer {
|
|
||||||
try checkCanDecodeValue()
|
|
||||||
defer { self.currentIndex += 1 }
|
|
||||||
|
|
||||||
let startIndex = self.index
|
|
||||||
|
|
||||||
var currDataSpec: DataSpec? = nil
|
|
||||||
if currentSpec != nil && currentSpec!.isArray && currentSpec!.dataSpecBuilder != nil {
|
|
||||||
currDataSpec = DataSpec("", true, false, currentSpec!.dataSpecBuilder!.copy() as? DataSpecBuilder)
|
|
||||||
} else {
|
|
||||||
let dataSpec = self.userInfo[MessagePackDecoder.dataSpecKey] as? DataSpecBuilder
|
|
||||||
if let currDS = dataSpec?.next() {
|
|
||||||
currDataSpec = DataSpec(currDS.name, currDS.isObj, currDS.isArray, currDS.dataSpecBuilder?.copy() as? DataSpecBuilder)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let length: Int
|
|
||||||
let format = try self.readByte()
|
|
||||||
switch format {
|
|
||||||
case 0x00...0x7f,
|
|
||||||
0xc0, 0xc2, 0xc3,
|
|
||||||
0xe0...0xff:
|
|
||||||
length = 0
|
|
||||||
case 0xcc, 0xd0, 0xd4:
|
|
||||||
length = 1
|
|
||||||
case 0xcd, 0xd1, 0xd5:
|
|
||||||
length = 2
|
|
||||||
case 0xca, 0xce, 0xd2:
|
|
||||||
length = 4
|
|
||||||
case 0xcb, 0xcf, 0xd3:
|
|
||||||
length = 8
|
|
||||||
case 0xd6:
|
|
||||||
length = 5
|
|
||||||
case 0xd7:
|
|
||||||
length = 9
|
|
||||||
case 0xd8:
|
|
||||||
length = 16
|
|
||||||
case 0xa0...0xbf:
|
|
||||||
length = Int(format - 0xa0)
|
|
||||||
case 0xc4, 0xc7, 0xd9:
|
|
||||||
length = Int(try read(UInt8.self))
|
|
||||||
case 0xc5, 0xc8, 0xda:
|
|
||||||
length = Int(try read(UInt16.self))
|
|
||||||
case 0xc6, 0xc9, 0xdb:
|
|
||||||
length = Int(try read(UInt32.self))
|
|
||||||
case 0x80...0x8f, 0xde, 0xdf:
|
|
||||||
let container = _MessagePackDecoder.KeyedContainer<AnyCodingKey>(data: self.data.suffix(from: startIndex), codingPath: self.nestedCodingPath, userInfo: self.userInfo)
|
|
||||||
container.currentSpec = currDataSpec
|
|
||||||
_ = container.nestedContainers // FIXME
|
|
||||||
self.index = container.index
|
|
||||||
|
|
||||||
return container
|
|
||||||
case 0x90...0x9f, 0xdc, 0xdd:
|
|
||||||
if currDataSpec != nil && currDataSpec!.isObj {
|
|
||||||
var objUserInfo = self.userInfo
|
|
||||||
objUserInfo[MessagePackDecoder.dataSpecKey] = currDataSpec!.dataSpecBuilder!
|
|
||||||
|
|
||||||
let container = _MessagePackDecoder.KeyedContainer<AnyCodingKey>(data: self.data.suffix(from: startIndex), codingPath: self.nestedCodingPath, userInfo: objUserInfo)
|
|
||||||
container.currentSpec = currDataSpec
|
|
||||||
_ = container.nestedContainers // FIXME
|
|
||||||
self.index = container.index
|
|
||||||
|
|
||||||
return container
|
|
||||||
}
|
|
||||||
|
|
||||||
var arrUserInfo = self.userInfo
|
|
||||||
if currDataSpec != nil && currDataSpec!.isArray {
|
|
||||||
arrUserInfo[MessagePackDecoder.dataSpecKey] = currDataSpec!.dataSpecBuilder!
|
|
||||||
}
|
|
||||||
|
|
||||||
let container = _MessagePackDecoder.UnkeyedContainer(data: self.data.suffix(from: startIndex), codingPath: self.nestedCodingPath, userInfo: arrUserInfo)
|
|
||||||
container.currentSpec = currDataSpec
|
|
||||||
_ = container.nestedContainers // FIXME
|
|
||||||
|
|
||||||
self.index = container.index
|
|
||||||
|
|
||||||
return container
|
|
||||||
default:
|
|
||||||
throw DecodingError.dataCorruptedError(in: self, debugDescription: "Invalid format: \(format)")
|
|
||||||
}
|
|
||||||
|
|
||||||
let range: Range<Data.Index> = startIndex..<self.index.advanced(by: length)
|
|
||||||
self.index = range.upperBound
|
|
||||||
|
|
||||||
let container = _MessagePackDecoder.SingleValueContainer(data: self.data.subdata(in: range), codingPath: self.codingPath, userInfo: self.userInfo)
|
|
||||||
container.currentSpec = currDataSpec
|
|
||||||
|
|
||||||
return container
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackDecoder.UnkeyedContainer: MessagePackDecodingContainer {}
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
import Foundation
|
|
||||||
|
|
||||||
extension _MessagePackEncoder {
|
|
||||||
final class KeyedContainer<Key> where Key: CodingKey {
|
|
||||||
private var storage: [AnyCodingKey: _MessagePackEncodingContainer] = [:]
|
|
||||||
|
|
||||||
var codingPath: [CodingKey]
|
|
||||||
var userInfo: [CodingUserInfoKey: Any]
|
|
||||||
|
|
||||||
func nestedCodingPath(forKey key: CodingKey) -> [CodingKey] {
|
|
||||||
return self.codingPath + [key]
|
|
||||||
}
|
|
||||||
|
|
||||||
init(codingPath: [CodingKey], userInfo: [CodingUserInfoKey : Any]) {
|
|
||||||
self.codingPath = codingPath
|
|
||||||
self.userInfo = userInfo
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackEncoder.KeyedContainer: KeyedEncodingContainerProtocol {
|
|
||||||
func encodeNil(forKey key: Key) throws {
|
|
||||||
var container = self.nestedSingleValueContainer(forKey: key)
|
|
||||||
try container.encodeNil()
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode<T>(_ value: T, forKey key: Key) throws where T : Encodable {
|
|
||||||
var container = self.nestedSingleValueContainer(forKey: key)
|
|
||||||
try container.encode(value)
|
|
||||||
}
|
|
||||||
|
|
||||||
private func nestedSingleValueContainer(forKey key: Key) -> SingleValueEncodingContainer {
|
|
||||||
let container = _MessagePackEncoder.SingleValueContainer(codingPath: self.nestedCodingPath(forKey: key), userInfo: self.userInfo)
|
|
||||||
self.storage[AnyCodingKey(key)] = container
|
|
||||||
return container
|
|
||||||
}
|
|
||||||
|
|
||||||
func nestedUnkeyedContainer(forKey key: Key) -> UnkeyedEncodingContainer {
|
|
||||||
let container = _MessagePackEncoder.UnkeyedContainer(codingPath: self.nestedCodingPath(forKey: key), userInfo: self.userInfo)
|
|
||||||
self.storage[AnyCodingKey(key)] = container
|
|
||||||
|
|
||||||
return container
|
|
||||||
}
|
|
||||||
|
|
||||||
func nestedContainer<NestedKey>(keyedBy keyType: NestedKey.Type, forKey key: Key) -> KeyedEncodingContainer<NestedKey> where NestedKey : CodingKey {
|
|
||||||
let container = _MessagePackEncoder.KeyedContainer<NestedKey>(codingPath: self.nestedCodingPath(forKey: key), userInfo: self.userInfo)
|
|
||||||
self.storage[AnyCodingKey(key)] = container
|
|
||||||
|
|
||||||
return KeyedEncodingContainer(container)
|
|
||||||
}
|
|
||||||
|
|
||||||
func superEncoder() -> Encoder {
|
|
||||||
fatalError("Unimplemented") // FIXME
|
|
||||||
}
|
|
||||||
|
|
||||||
func superEncoder(forKey key: Key) -> Encoder {
|
|
||||||
fatalError("Unimplemented") // FIXME
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackEncoder.KeyedContainer: _MessagePackEncodingContainer {
|
|
||||||
var data: Data {
|
|
||||||
var data = Data()
|
|
||||||
|
|
||||||
let length = storage.count
|
|
||||||
if let uint16 = UInt16(exactly: length) {
|
|
||||||
if length <= 15 {
|
|
||||||
data.append(0x80 + UInt8(length))
|
|
||||||
} else {
|
|
||||||
data.append(0xde)
|
|
||||||
data.append(contentsOf: uint16.bytes)
|
|
||||||
}
|
|
||||||
} else if let uint32 = UInt32(exactly: length) {
|
|
||||||
data.append(0xdf)
|
|
||||||
data.append(contentsOf: uint32.bytes)
|
|
||||||
} else {
|
|
||||||
fatalError()
|
|
||||||
}
|
|
||||||
|
|
||||||
for (key, container) in self.storage {
|
|
||||||
let keyContainer = _MessagePackEncoder.SingleValueContainer(codingPath: self.codingPath, userInfo: self.userInfo)
|
|
||||||
try! keyContainer.encode(key.stringValue)
|
|
||||||
data.append(keyContainer.data)
|
|
||||||
|
|
||||||
data.append(container.data)
|
|
||||||
}
|
|
||||||
|
|
||||||
return data
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
import Foundation
|
|
||||||
|
|
||||||
/**
|
|
||||||
An object that encodes instances of a data type as MessagePack objects.
|
|
||||||
*/
|
|
||||||
final public class MessagePackEncoder {
|
|
||||||
public init() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
A dictionary you use to customize the encoding process
|
|
||||||
by providing contextual information.
|
|
||||||
*/
|
|
||||||
public var userInfo: [CodingUserInfoKey : Any] = [:]
|
|
||||||
|
|
||||||
/**
|
|
||||||
Returns a MessagePack-encoded representation of the value you supply.
|
|
||||||
|
|
||||||
- Parameters:
|
|
||||||
- value: The value to encode as MessagePack.
|
|
||||||
- Throws: `EncodingError.invalidValue(_:_:)`
|
|
||||||
if the value can't be encoded as a MessagePack object.
|
|
||||||
*/
|
|
||||||
public func encode<T>(_ value: T) throws -> Data where T : Encodable {
|
|
||||||
let encoder = _MessagePackEncoder()
|
|
||||||
encoder.userInfo = self.userInfo
|
|
||||||
|
|
||||||
switch value {
|
|
||||||
case let data as Data:
|
|
||||||
try Box<Data>(data).encode(to: encoder)
|
|
||||||
case let date as Date:
|
|
||||||
try Box<Date>(date).encode(to: encoder)
|
|
||||||
default:
|
|
||||||
try value.encode(to: encoder)
|
|
||||||
}
|
|
||||||
|
|
||||||
return encoder.data
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - TopLevelEncoder
|
|
||||||
|
|
||||||
#if canImport(Combine)
|
|
||||||
import Combine
|
|
||||||
|
|
||||||
extension MessagePackEncoder: TopLevelEncoder {
|
|
||||||
public typealias Input = Data
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// MARK: -
|
|
||||||
|
|
||||||
protocol _MessagePackEncodingContainer {
|
|
||||||
var data: Data { get }
|
|
||||||
}
|
|
||||||
|
|
||||||
class _MessagePackEncoder {
|
|
||||||
var codingPath: [CodingKey] = []
|
|
||||||
|
|
||||||
var userInfo: [CodingUserInfoKey : Any] = [:]
|
|
||||||
|
|
||||||
fileprivate var container: _MessagePackEncodingContainer?
|
|
||||||
|
|
||||||
var data: Data {
|
|
||||||
return container?.data ?? Data()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackEncoder: Encoder {
|
|
||||||
fileprivate func assertCanCreateContainer() {
|
|
||||||
precondition(self.container == nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func container<Key>(keyedBy type: Key.Type) -> KeyedEncodingContainer<Key> where Key : CodingKey {
|
|
||||||
assertCanCreateContainer()
|
|
||||||
|
|
||||||
let container = KeyedContainer<Key>(codingPath: self.codingPath, userInfo: self.userInfo)
|
|
||||||
self.container = container
|
|
||||||
|
|
||||||
return KeyedEncodingContainer(container)
|
|
||||||
}
|
|
||||||
|
|
||||||
func unkeyedContainer() -> UnkeyedEncodingContainer {
|
|
||||||
assertCanCreateContainer()
|
|
||||||
|
|
||||||
let container = UnkeyedContainer(codingPath: self.codingPath, userInfo: self.userInfo)
|
|
||||||
self.container = container
|
|
||||||
|
|
||||||
return container
|
|
||||||
}
|
|
||||||
|
|
||||||
func singleValueContainer() -> SingleValueEncodingContainer {
|
|
||||||
assertCanCreateContainer()
|
|
||||||
|
|
||||||
let container = SingleValueContainer(codingPath: self.codingPath, userInfo: self.userInfo)
|
|
||||||
self.container = container
|
|
||||||
|
|
||||||
return container
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,264 +0,0 @@
|
|||||||
import Foundation
|
|
||||||
|
|
||||||
extension _MessagePackEncoder {
|
|
||||||
final class SingleValueContainer {
|
|
||||||
private var storage: Data = Data()
|
|
||||||
|
|
||||||
fileprivate var canEncodeNewValue = true
|
|
||||||
fileprivate func checkCanEncode(value: Any?) throws {
|
|
||||||
guard self.canEncodeNewValue else {
|
|
||||||
let context = EncodingError.Context(codingPath: self.codingPath, debugDescription: "Attempt to encode value through single value container when previously value already encoded.")
|
|
||||||
throw EncodingError.invalidValue(value as Any, context)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var codingPath: [CodingKey]
|
|
||||||
var userInfo: [CodingUserInfoKey: Any]
|
|
||||||
|
|
||||||
init(codingPath: [CodingKey], userInfo: [CodingUserInfoKey : Any]) {
|
|
||||||
self.codingPath = codingPath
|
|
||||||
self.userInfo = userInfo
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackEncoder.SingleValueContainer: SingleValueEncodingContainer {
|
|
||||||
func encodeNil() throws {
|
|
||||||
try checkCanEncode(value: nil)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
self.storage.append(0xc0)
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: Bool) throws {
|
|
||||||
try checkCanEncode(value: nil)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
switch value {
|
|
||||||
case false:
|
|
||||||
self.storage.append(0xc2)
|
|
||||||
case true:
|
|
||||||
self.storage.append(0xc3)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: String) throws {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
guard let data = value.data(using: .utf8) else {
|
|
||||||
let context = EncodingError.Context(codingPath: self.codingPath, debugDescription: "Cannot encode string using UTF-8 encoding.")
|
|
||||||
throw EncodingError.invalidValue(value, context)
|
|
||||||
}
|
|
||||||
|
|
||||||
let length = data.count
|
|
||||||
if let uint8 = UInt8(exactly: length) {
|
|
||||||
if (uint8 <= 31) {
|
|
||||||
self.storage.append(0xa0 + uint8)
|
|
||||||
} else {
|
|
||||||
self.storage.append(0xd9)
|
|
||||||
self.storage.append(contentsOf: uint8.bytes)
|
|
||||||
}
|
|
||||||
} else if let uint16 = UInt16(exactly: length) {
|
|
||||||
self.storage.append(0xda)
|
|
||||||
self.storage.append(contentsOf: uint16.bytes)
|
|
||||||
} else if let uint32 = UInt32(exactly: length) {
|
|
||||||
self.storage.append(0xdb)
|
|
||||||
self.storage.append(contentsOf: uint32.bytes)
|
|
||||||
} else {
|
|
||||||
let context = EncodingError.Context(codingPath: self.codingPath, debugDescription: "Cannot encode string with length \(length).")
|
|
||||||
throw EncodingError.invalidValue(value, context)
|
|
||||||
}
|
|
||||||
|
|
||||||
self.storage.append(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: Double) throws {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
self.storage.append(0xcb)
|
|
||||||
self.storage.append(contentsOf: value.bitPattern.bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: Float) throws {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
self.storage.append(0xca)
|
|
||||||
self.storage.append(contentsOf: value.bitPattern.bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode<T>(_ value: T) throws where T : BinaryInteger & Encodable {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
if value < 0 {
|
|
||||||
if let int8 = Int8(exactly: value) {
|
|
||||||
return try encode(int8)
|
|
||||||
} else if let int16 = Int16(exactly: value) {
|
|
||||||
return try encode(int16)
|
|
||||||
} else if let int32 = Int32(exactly: value) {
|
|
||||||
return try encode(int32)
|
|
||||||
} else if let int64 = Int64(exactly: value) {
|
|
||||||
return try encode(int64)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if let uint8 = UInt8(exactly: value) {
|
|
||||||
return try encode(uint8)
|
|
||||||
} else if let uint16 = UInt16(exactly: value) {
|
|
||||||
return try encode(uint16)
|
|
||||||
} else if let uint32 = UInt32(exactly: value) {
|
|
||||||
return try encode(uint32)
|
|
||||||
} else if let uint64 = UInt64(exactly: value) {
|
|
||||||
return try encode(uint64)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let context = EncodingError.Context(codingPath: self.codingPath, debugDescription: "Cannot encode integer \(value).")
|
|
||||||
throw EncodingError.invalidValue(value, context)
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: Int8) throws {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
if (value >= 0 && value <= 127) {
|
|
||||||
self.storage.append(UInt8(value))
|
|
||||||
} else if (value < 0 && value >= -31) {
|
|
||||||
self.storage.append(0xe0 + (0x1f & UInt8(truncatingIfNeeded: value)))
|
|
||||||
} else {
|
|
||||||
self.storage.append(0xd0)
|
|
||||||
self.storage.append(contentsOf: value.bytes)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: Int16) throws {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
self.storage.append(0xd1)
|
|
||||||
self.storage.append(contentsOf: value.bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: Int32) throws {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
self.storage.append(0xd2)
|
|
||||||
self.storage.append(contentsOf: value.bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: Int64) throws {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
self.storage.append(0xd3)
|
|
||||||
self.storage.append(contentsOf: value.bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: UInt8) throws {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
if (value <= 127) {
|
|
||||||
self.storage.append(value)
|
|
||||||
} else {
|
|
||||||
self.storage.append(0xcc)
|
|
||||||
self.storage.append(contentsOf: value.bytes)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: UInt16) throws {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
self.storage.append(0xcd)
|
|
||||||
self.storage.append(contentsOf: value.bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: UInt32) throws {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
self.storage.append(0xce)
|
|
||||||
self.storage.append(contentsOf: value.bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: UInt64) throws {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
self.storage.append(0xcf)
|
|
||||||
self.storage.append(contentsOf: value.bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: Date) throws {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
let timeInterval = value.timeIntervalSince1970
|
|
||||||
let (integral, fractional) = modf(timeInterval)
|
|
||||||
|
|
||||||
let seconds = Int64(integral)
|
|
||||||
let nanoseconds = UInt32(fractional * Double(NSEC_PER_SEC))
|
|
||||||
|
|
||||||
if seconds < 0 || seconds > UInt32.max {
|
|
||||||
self.storage.append(0xc7)
|
|
||||||
self.storage.append(0x0C)
|
|
||||||
self.storage.append(0xFF)
|
|
||||||
self.storage.append(contentsOf: nanoseconds.bytes)
|
|
||||||
self.storage.append(contentsOf: seconds.bytes)
|
|
||||||
} else if nanoseconds > 0 {
|
|
||||||
self.storage.append(0xd7)
|
|
||||||
self.storage.append(0xFF)
|
|
||||||
self.storage.append(contentsOf: ((UInt64(nanoseconds) << 34) + UInt64(seconds)).bytes)
|
|
||||||
} else {
|
|
||||||
self.storage.append(0xd6)
|
|
||||||
self.storage.append(0xFF)
|
|
||||||
self.storage.append(contentsOf: UInt32(seconds).bytes)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode(_ value: Data) throws {
|
|
||||||
let length = value.count
|
|
||||||
if let uint8 = UInt8(exactly: length) {
|
|
||||||
self.storage.append(0xc4)
|
|
||||||
self.storage.append(uint8)
|
|
||||||
self.storage.append(value)
|
|
||||||
} else if let uint16 = UInt16(exactly: length) {
|
|
||||||
self.storage.append(0xc5)
|
|
||||||
self.storage.append(contentsOf: uint16.bytes)
|
|
||||||
self.storage.append(value)
|
|
||||||
} else if let uint32 = UInt32(exactly: length) {
|
|
||||||
self.storage.append(0xc6)
|
|
||||||
self.storage.append(contentsOf: uint32.bytes)
|
|
||||||
self.storage.append(value)
|
|
||||||
} else {
|
|
||||||
let context = EncodingError.Context(codingPath: self.codingPath, debugDescription: "Cannot encode data of length \(value.count).")
|
|
||||||
throw EncodingError.invalidValue(value, context)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode<T>(_ value: T) throws where T : Encodable {
|
|
||||||
try checkCanEncode(value: value)
|
|
||||||
defer { self.canEncodeNewValue = false }
|
|
||||||
|
|
||||||
switch value {
|
|
||||||
case let data as Data:
|
|
||||||
try self.encode(data)
|
|
||||||
case let date as Date:
|
|
||||||
try self.encode(date)
|
|
||||||
default:
|
|
||||||
let encoder = _MessagePackEncoder()
|
|
||||||
try value.encode(to: encoder)
|
|
||||||
self.storage.append(encoder.data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackEncoder.SingleValueContainer: _MessagePackEncodingContainer {
|
|
||||||
var data: Data {
|
|
||||||
return storage
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
import Foundation
|
|
||||||
|
|
||||||
extension _MessagePackEncoder {
|
|
||||||
final class UnkeyedContainer {
|
|
||||||
private var storage: [_MessagePackEncodingContainer] = []
|
|
||||||
|
|
||||||
var count: Int {
|
|
||||||
return storage.count
|
|
||||||
}
|
|
||||||
|
|
||||||
var codingPath: [CodingKey]
|
|
||||||
|
|
||||||
var nestedCodingPath: [CodingKey] {
|
|
||||||
return self.codingPath + [AnyCodingKey(intValue: self.count)!]
|
|
||||||
}
|
|
||||||
|
|
||||||
var userInfo: [CodingUserInfoKey: Any]
|
|
||||||
|
|
||||||
init(codingPath: [CodingKey], userInfo: [CodingUserInfoKey : Any]) {
|
|
||||||
self.codingPath = codingPath
|
|
||||||
self.userInfo = userInfo
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackEncoder.UnkeyedContainer: UnkeyedEncodingContainer {
|
|
||||||
func encodeNil() throws {
|
|
||||||
var container = self.nestedSingleValueContainer()
|
|
||||||
try container.encodeNil()
|
|
||||||
}
|
|
||||||
|
|
||||||
func encode<T>(_ value: T) throws where T : Encodable {
|
|
||||||
var container = self.nestedSingleValueContainer()
|
|
||||||
try container.encode(value)
|
|
||||||
}
|
|
||||||
|
|
||||||
private func nestedSingleValueContainer() -> SingleValueEncodingContainer {
|
|
||||||
let container = _MessagePackEncoder.SingleValueContainer(codingPath: self.nestedCodingPath, userInfo: self.userInfo)
|
|
||||||
self.storage.append(container)
|
|
||||||
|
|
||||||
return container
|
|
||||||
}
|
|
||||||
|
|
||||||
func nestedContainer<NestedKey>(keyedBy keyType: NestedKey.Type) -> KeyedEncodingContainer<NestedKey> where NestedKey : CodingKey {
|
|
||||||
let container = _MessagePackEncoder.KeyedContainer<NestedKey>(codingPath: self.nestedCodingPath, userInfo: self.userInfo)
|
|
||||||
self.storage.append(container)
|
|
||||||
|
|
||||||
return KeyedEncodingContainer(container)
|
|
||||||
}
|
|
||||||
|
|
||||||
func nestedUnkeyedContainer() -> UnkeyedEncodingContainer {
|
|
||||||
let container = _MessagePackEncoder.UnkeyedContainer(codingPath: self.nestedCodingPath, userInfo: self.userInfo)
|
|
||||||
self.storage.append(container)
|
|
||||||
|
|
||||||
return container
|
|
||||||
}
|
|
||||||
|
|
||||||
func superEncoder() -> Encoder {
|
|
||||||
fatalError("Unimplemented") // FIXME
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension _MessagePackEncoder.UnkeyedContainer: _MessagePackEncodingContainer {
|
|
||||||
var data: Data {
|
|
||||||
var data = Data()
|
|
||||||
|
|
||||||
let length = storage.count
|
|
||||||
if let uint16 = UInt16(exactly: length) {
|
|
||||||
if uint16 <= 15 {
|
|
||||||
data.append(UInt8(0x90 + uint16))
|
|
||||||
} else {
|
|
||||||
data.append(0xdc)
|
|
||||||
data.append(contentsOf: uint16.bytes)
|
|
||||||
}
|
|
||||||
} else if let uint32 = UInt32(exactly: length) {
|
|
||||||
data.append(0xdd)
|
|
||||||
data.append(contentsOf: uint32.bytes)
|
|
||||||
} else {
|
|
||||||
fatalError()
|
|
||||||
}
|
|
||||||
|
|
||||||
for container in storage {
|
|
||||||
data.append(container.data)
|
|
||||||
}
|
|
||||||
|
|
||||||
return data
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
extension FixedWidthInteger {
|
|
||||||
init(bytes: [UInt8]) {
|
|
||||||
self = bytes.withUnsafeBufferPointer {
|
|
||||||
$0.baseAddress!.withMemoryRebound(to: Self.self, capacity: 1) {
|
|
||||||
$0.pointee
|
|
||||||
}
|
|
||||||
}.bigEndian
|
|
||||||
}
|
|
||||||
|
|
||||||
var bytes: [UInt8] {
|
|
||||||
let capacity = MemoryLayout<Self>.size
|
|
||||||
var mutableValue = self.bigEndian
|
|
||||||
return withUnsafePointer(to: &mutableValue) {
|
|
||||||
return $0.withMemoryRebound(to: UInt8.self, capacity: capacity) {
|
|
||||||
return Array(UnsafeBufferPointer(start: $0, count: capacity))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
import XCTest
|
|
||||||
@testable import MessagePackTests
|
|
||||||
|
|
||||||
XCTMain([
|
|
||||||
testCase(MessagePackDecodingTests.allTests),
|
|
||||||
testCase(MessagePackEncodingTests.allTests),
|
|
||||||
testCase(MessagePackRoundTripTests.allTests),
|
|
||||||
])
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
struct Airport: Codable, Equatable {
|
|
||||||
let name: String
|
|
||||||
let iata: String
|
|
||||||
let icao: String
|
|
||||||
let coordinates: [Double]
|
|
||||||
|
|
||||||
struct Runway: Codable, Equatable {
|
|
||||||
enum Surface: String, Codable, Equatable {
|
|
||||||
case rigid, flexible, gravel, sealed, unpaved, other
|
|
||||||
}
|
|
||||||
|
|
||||||
let direction: String
|
|
||||||
let distance: Int
|
|
||||||
let surface: Surface
|
|
||||||
}
|
|
||||||
|
|
||||||
let runways: [Runway]
|
|
||||||
|
|
||||||
let instrumentApproachProcedures: [String]
|
|
||||||
|
|
||||||
static var example: Airport {
|
|
||||||
return Airport(
|
|
||||||
name: "Portland International Airport",
|
|
||||||
iata: "PDX",
|
|
||||||
icao: "KPDX",
|
|
||||||
coordinates: [-122.5975,
|
|
||||||
45.5886111111111],
|
|
||||||
runways: [
|
|
||||||
Airport.Runway(
|
|
||||||
direction: "3/21",
|
|
||||||
distance: 1829,
|
|
||||||
surface: .flexible
|
|
||||||
)
|
|
||||||
],
|
|
||||||
instrumentApproachProcedures: [
|
|
||||||
"HI-ILS OR LOC RWY 28",
|
|
||||||
"HI-ILS OR LOC/DME RWY 10",
|
|
||||||
"ILS OR LOC RWY 10L",
|
|
||||||
"ILS OR LOC RWY 10R",
|
|
||||||
"ILS OR LOC RWY 28L",
|
|
||||||
"ILS OR LOC RWY 28R",
|
|
||||||
"ILS RWY 10R (SA CAT I)",
|
|
||||||
"ILS RWY 10R (CAT II - III)",
|
|
||||||
"RNAV (RNP) Y RWY 28L",
|
|
||||||
"RNAV (RNP) Y RWY 28R",
|
|
||||||
"RNAV (RNP) Z RWY 10L",
|
|
||||||
"RNAV (RNP) Z RWY 10R",
|
|
||||||
"RNAV (RNP) Z RWY 28L",
|
|
||||||
"RNAV (RNP) Z RWY 28R",
|
|
||||||
"RNAV (GPS) X RWY 28L",
|
|
||||||
"RNAV (GPS) X RWY 28R",
|
|
||||||
"RNAV (GPS) Y RWY 10L",
|
|
||||||
"RNAV (GPS) Y RWY 10R",
|
|
||||||
"LOC/DME RWY 21",
|
|
||||||
"VOR-A",
|
|
||||||
"HI-TACAN RWY 10",
|
|
||||||
"TACAN RWY 28",
|
|
||||||
"COLUMBIA VISUAL RWY 10L/",
|
|
||||||
"MILL VISUAL RWY 28L/R"
|
|
||||||
]
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,301 +0,0 @@
|
|||||||
import XCTest
|
|
||||||
@testable import MessagePack
|
|
||||||
|
|
||||||
class MessagePackDecodingTests: XCTestCase {
|
|
||||||
var decoder: MessagePackDecoder!
|
|
||||||
|
|
||||||
override func setUp() {
|
|
||||||
self.decoder = MessagePackDecoder()
|
|
||||||
}
|
|
||||||
|
|
||||||
func assertTypeMismatch<T>(_ expression: @autoclosure () throws -> T,
|
|
||||||
_ message: @autoclosure () -> String = "",
|
|
||||||
file: StaticString = #file,
|
|
||||||
line: UInt = #line) -> Any.Type? {
|
|
||||||
var error: Error?
|
|
||||||
XCTAssertThrowsError(expression, message,
|
|
||||||
file: file, line: line) {
|
|
||||||
error = $0
|
|
||||||
}
|
|
||||||
guard case .typeMismatch(let type, _) = error as? DecodingError else {
|
|
||||||
XCTFail(file: file, line: line)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return type
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeNil() {
|
|
||||||
let data = Data(bytes: [0xC0])
|
|
||||||
let value = try! decoder.decode(Int?.self, from: data)
|
|
||||||
XCTAssertNil(value)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeFalse() {
|
|
||||||
let data = Data(bytes: [0xc2])
|
|
||||||
let value = try! decoder.decode(Bool.self, from: data)
|
|
||||||
XCTAssertEqual(value, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeTrue() {
|
|
||||||
let data = Data(bytes: [0xc3])
|
|
||||||
let value = try! decoder.decode(Bool.self, from: data)
|
|
||||||
XCTAssertEqual(value, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeInt() {
|
|
||||||
let data = Data(bytes: [0x2A])
|
|
||||||
let value = try! decoder.decode(Int.self, from: data)
|
|
||||||
XCTAssertEqual(value, 42)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeNegativeInt() {
|
|
||||||
let data = Data(bytes: [0xFF])
|
|
||||||
let value = try! decoder.decode(Int.self, from: data)
|
|
||||||
XCTAssertEqual(value, -1)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeUInt() {
|
|
||||||
let data = Data(bytes: [0xCC, 0x80])
|
|
||||||
let value = try! decoder.decode(Int.self, from: data)
|
|
||||||
XCTAssertEqual(value, 128)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeFloat() {
|
|
||||||
let data = Data(bytes: [0xCA, 0x40, 0x48, 0xF5, 0xC3])
|
|
||||||
let value = try! decoder.decode(Float.self, from: data)
|
|
||||||
XCTAssertEqual(value, 3.14)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeFloatToDouble() {
|
|
||||||
let data = Data(bytes: [0xCA, 0x40, 0x48, 0xF5, 0xC3])
|
|
||||||
let type = assertTypeMismatch(try decoder.decode(Double.self, from: data))
|
|
||||||
XCTAssertTrue(type is Double.Type)
|
|
||||||
decoder.nonMatchingFloatDecodingStrategy = .cast
|
|
||||||
let value = try! decoder.decode(Double.self, from: data)
|
|
||||||
XCTAssertEqual(value, 3.14, accuracy: 1e-6)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeDouble() {
|
|
||||||
let data = Data(bytes: [0xCB, 0x40, 0x09, 0x21, 0xF9, 0xF0, 0x1B, 0x86, 0x6E])
|
|
||||||
let value = try! decoder.decode(Double.self, from: data)
|
|
||||||
XCTAssertEqual(value, 3.14159)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeDoubleToFloat() {
|
|
||||||
let data = Data(bytes: [0xCB, 0x40, 0x09, 0x21, 0xF9, 0xF0, 0x1B, 0x86, 0x6E])
|
|
||||||
let type = assertTypeMismatch(try decoder.decode(Float.self, from: data))
|
|
||||||
XCTAssertTrue(type is Float.Type)
|
|
||||||
decoder.nonMatchingFloatDecodingStrategy = .cast
|
|
||||||
let value = try! decoder.decode(Float.self, from: data)
|
|
||||||
XCTAssertEqual(value, 3.14159)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeFixedArray() {
|
|
||||||
let data = Data(bytes: [0x93, 0x01, 0x02, 0x03])
|
|
||||||
let value = try! decoder.decode([Int].self, from: data)
|
|
||||||
XCTAssertEqual(value, [1, 2, 3])
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeVariableArray() {
|
|
||||||
let data = Data(bytes: [0xdc] + [0x00, 0x10] + Array(0x01...0x10))
|
|
||||||
let value = try! decoder.decode([Int].self, from: data)
|
|
||||||
XCTAssertEqual(value, Array(1...16))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeFixedDictionary() {
|
|
||||||
let data = Data(bytes: [0x83, 0xA1, 0x62, 0x02, 0xA1, 0x61, 0x01, 0xA1, 0x63, 0x03])
|
|
||||||
let value = try! decoder.decode([String: Int].self, from: data)
|
|
||||||
XCTAssertEqual(value, ["a": 1, "b": 2, "c": 3])
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeData() {
|
|
||||||
let data = Data(bytes: [0xC4, 0x05, 0x68, 0x65, 0x6C, 0x6C, 0x6F])
|
|
||||||
let value = try! decoder.decode(Data.self, from: data)
|
|
||||||
XCTAssertEqual(value, "hello".data(using: .utf8))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeDate() {
|
|
||||||
let data = Data(bytes: [0xD6, 0xFF, 0x00, 0x00, 0x00, 0x01])
|
|
||||||
let date = Date(timeIntervalSince1970: 1)
|
|
||||||
let value = try! decoder.decode(Date.self, from: data)
|
|
||||||
XCTAssertEqual(value, date)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeDistantPast() {
|
|
||||||
let data = Data(bytes: [0xC7, 0x0C, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF1, 0x88, 0x6B, 0x66, 0x00])
|
|
||||||
let date = Date.distantPast
|
|
||||||
let value = try! decoder.decode(Date.self, from: data)
|
|
||||||
XCTAssertEqual(value, date)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeDistantFuture() {
|
|
||||||
let data = Data(bytes: [0xC7, 0x0C, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0xEC, 0x31, 0x88, 0x00])
|
|
||||||
let date = Date.distantFuture
|
|
||||||
let value = try! decoder.decode(Date.self, from: data)
|
|
||||||
XCTAssertEqual(value, date)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeArrayWithDate() {
|
|
||||||
let data = Data(bytes: [0x91, 0xD6, 0xFF, 0x00, 0x00, 0x00, 0x01])
|
|
||||||
let date = Date(timeIntervalSince1970: 1)
|
|
||||||
let value = try! decoder.decode([Date].self, from: data)
|
|
||||||
XCTAssertEqual(value, [date])
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeDictionaryWithDate() {
|
|
||||||
let data = Data(bytes: [0x81, 0xA1, 0x31, 0xD6, 0xFF, 0x00, 0x00, 0x00, 0x01])
|
|
||||||
let date = Date(timeIntervalSince1970: 1)
|
|
||||||
let value = try! decoder.decode([String: Date].self, from: data)
|
|
||||||
XCTAssertEqual(value, ["1": date])
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDecodeBv() {
|
|
||||||
let b64 = "lK50ZXN0aW5nIHN0cmluZyeSpnF3ZXF3ZagxMjNpY29uc5OU2SRlMTZkYTYwMi0zMjE1LTRiZDYtYjY5MC00Y2Q4NmEwZmU3NjSoQ2lwaGVyIDEBk61jaXBodXNlcm5hbWUxrWFkZmFmZHcyMzQxMzGSkblodHRwczovL3d3dy5nb29nbGUuY29tLmFykbVodHRwczovL3d3dy5hcHBsZS5jb22U2SRhNjExMWU2Ny1hMTMwLTRiM2ItODM5NS0xZjIzMDFjNjk3ZjeoQ2lwaGVyIDIBk6g0MzEzMjEzMatqbGpsbHl1bHVpecCU2SRiOGIwODM3MC0xNGU0LTQzZmUtYjBkOS04ZjJlMDlmODJkYzWoQ2lwaGVyIDMBk6twaW9waW9waXBpb6x6eGN6eHZ6eHZ4enaSkbdodHRwczovL3d3dy52aXNhLmNvbS5hcpG1aHR0cHM6Ly93d3cuZG9ja3MuY29t" // array mode with envData and ciphers
|
|
||||||
|
|
||||||
// let b64 = "hKFirnRlc3Rpbmcgc3RyaW5noWMnp2VudkRhdGGCpGJhc2WmcXdlcXdlpWljb25zqDEyM2ljb25zp2NpcGhlcnOThKJpZNkkMDA4YmE0NDctZjU0Mi00OWVjLWJjYTktMDMzZTQ2OTU0YTBipG5hbWWoQ2lwaGVyIDGkdHlwZQGlbG9naW6DqHVzZXJuYW1lrWNpcGh1c2VybmFtZTGkdG90cK1hZGZhZmR3MjM0MTMxpHVyaXOSgaN1cmm5aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS5hcoGjdXJptWh0dHBzOi8vd3d3LmFwcGxlLmNvbYSiaWTZJDQ1ZTBhODJiLTgyZGQtNDJiZi05ODhhLTAyYTkyNGM4Yzg5M6RuYW1lqENpcGhlciAypHR5cGUBpWxvZ2lug6h1c2VybmFtZag0MzEzMjEzMaR0b3Rwq2psamxseXVsdWl5pHVyaXPAhKJpZNkkZTBjZWU5NDEtZDI1Ni00MjdiLWJkNWUtNDMxMmMwN2U1NDI5pG5hbWWoQ2lwaGVyIDOkdHlwZQGlbG9naW6DqHVzZXJuYW1lq3Bpb3Bpb3BpcGlvpHRvdHCsenhjenh2enh2eHp2pHVyaXOSgaN1cmm3aHR0cHM6Ly93d3cudmlzYS5jb20uYXKBo3VyabVodHRwczovL3d3dy5kb2Nrcy5jb20=" // dict mode with envData and ciphers
|
|
||||||
|
|
||||||
do {
|
|
||||||
if let d = Data(base64Encoded: b64) {
|
|
||||||
let decoder = MessagePackDecoder()
|
|
||||||
decoder.userInfo[MessagePackDecoder.dataSpecKey] = DataSpecBuilder()
|
|
||||||
.append("b")
|
|
||||||
.append("c")
|
|
||||||
.appendObj("envData", DataSpecBuilder()
|
|
||||||
.append("base")
|
|
||||||
.append("icons")
|
|
||||||
.build())
|
|
||||||
.appendArray("ciphers", DataSpecBuilder()
|
|
||||||
.append("id")
|
|
||||||
.append("name")
|
|
||||||
.append("type")
|
|
||||||
.appendObj("login", DataSpecBuilder()
|
|
||||||
.append("username")
|
|
||||||
.append("totp")
|
|
||||||
.appendArray("uris", DataSpecBuilder()
|
|
||||||
.append("uri")
|
|
||||||
.build())
|
|
||||||
.build())
|
|
||||||
.build())
|
|
||||||
.build()
|
|
||||||
|
|
||||||
let codTest = try decoder.decode(CodableTest.self, from: d)
|
|
||||||
|
|
||||||
XCTAssertEqual(codTest.b, "testing string")
|
|
||||||
XCTAssertEqual(codTest.envData.base, "qweqwe")
|
|
||||||
XCTAssertEqual(codTest.envData.icons, "123icons")
|
|
||||||
XCTAssertTrue(codTest.ciphers!.count > 1)
|
|
||||||
} else {
|
|
||||||
XCTAssertEqual(1, 0)
|
|
||||||
}
|
|
||||||
} catch let error {
|
|
||||||
XCTFail("E: \(error)")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static var allTests = [
|
|
||||||
("testDecodeNil", testDecodeNil),
|
|
||||||
("testDecodeFalse", testDecodeFalse),
|
|
||||||
("testDecodeTrue", testDecodeTrue),
|
|
||||||
("testDecodeInt", testDecodeInt),
|
|
||||||
("testDecodeUInt", testDecodeUInt),
|
|
||||||
("testDecodeFloat", testDecodeFloat),
|
|
||||||
("testDecodeFloatToDouble", testDecodeFloatToDouble),
|
|
||||||
("testDecodeDouble", testDecodeDouble),
|
|
||||||
("testDecodeDoubleToFloat", testDecodeDoubleToFloat),
|
|
||||||
("testDecodeFixedArray", testDecodeFixedArray),
|
|
||||||
("testDecodeFixedDictionary", testDecodeFixedDictionary),
|
|
||||||
("testDecodeData", testDecodeData),
|
|
||||||
("testDecodeDistantPast", testDecodeDistantPast),
|
|
||||||
("testDecodeDistantFuture", testDecodeDistantFuture),
|
|
||||||
("testDecodeArrayWithDate", testDecodeArrayWithDate),
|
|
||||||
("testDecodeDictionaryWithDate", testDecodeDictionaryWithDate),
|
|
||||||
("testDecodeBv", testDecodeBv)
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
struct CodableTest : Codable {
|
|
||||||
enum CodingKeys: Int, CodingKey {
|
|
||||||
case b
|
|
||||||
case c
|
|
||||||
case envData
|
|
||||||
case ciphers
|
|
||||||
}
|
|
||||||
|
|
||||||
var b: String
|
|
||||||
var c: Int
|
|
||||||
var envData: EnvironmentUrlDataDto
|
|
||||||
var ciphers: [Cipher]?
|
|
||||||
|
|
||||||
func printt() {
|
|
||||||
print("B: \(b)")
|
|
||||||
print("C: \(c)")
|
|
||||||
print("ENVDATA")
|
|
||||||
envData.printt()
|
|
||||||
|
|
||||||
if let cs = ciphers {
|
|
||||||
print("CIPHERS")
|
|
||||||
for c in cs {
|
|
||||||
c.printt()
|
|
||||||
print("----------------------------")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print("###########################")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct EnvironmentUrlDataDto : Codable {
|
|
||||||
var base: String?
|
|
||||||
var icons: String?
|
|
||||||
|
|
||||||
func printt() {
|
|
||||||
print("Base: \(base ?? "")")
|
|
||||||
print("Icons: \(icons ?? "")")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Cipher:Identifiable,Codable{
|
|
||||||
enum CodingKeys: Int, CodingKey {
|
|
||||||
case id
|
|
||||||
case name
|
|
||||||
case login
|
|
||||||
}
|
|
||||||
|
|
||||||
var id:String
|
|
||||||
var name:String?
|
|
||||||
var userId:String?
|
|
||||||
var login:Login
|
|
||||||
|
|
||||||
func printt() {
|
|
||||||
print("id: \(id)")
|
|
||||||
print("name: \(name ?? "")")
|
|
||||||
print("LOGIN")
|
|
||||||
login.printt()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Login:Codable{
|
|
||||||
var username:String?
|
|
||||||
var totp:String?
|
|
||||||
var uris:[LoginUri]?
|
|
||||||
|
|
||||||
func printt() {
|
|
||||||
print("username: \(username ?? "")")
|
|
||||||
print("totp: \(totp ?? "")")
|
|
||||||
print("URIS")
|
|
||||||
if let us = uris {
|
|
||||||
for u in us {
|
|
||||||
u.printt()
|
|
||||||
print("----------------------------")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct LoginUri:Codable{
|
|
||||||
var uri:String?
|
|
||||||
|
|
||||||
func printt() {
|
|
||||||
print("Uri: \(uri ?? "")")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,127 +0,0 @@
|
|||||||
import XCTest
|
|
||||||
@testable import MessagePack
|
|
||||||
|
|
||||||
class MessagePackEncodingTests: XCTestCase {
|
|
||||||
var encoder: MessagePackEncoder!
|
|
||||||
|
|
||||||
override func setUp() {
|
|
||||||
self.encoder = MessagePackEncoder()
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeNil() {
|
|
||||||
let value = try! encoder.encode(nil as Int?)
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0xc0]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeFalse() {
|
|
||||||
let value = try! encoder.encode(false)
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0xc2]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeTrue() {
|
|
||||||
let value = try! encoder.encode(true)
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0xc3]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeInt() {
|
|
||||||
let value = try! encoder.encode(42 as Int)
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0x2A]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeUInt() {
|
|
||||||
let value = try! encoder.encode(128 as UInt)
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0xCC, 0x80]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeFloat() {
|
|
||||||
let value = try! encoder.encode(3.14 as Float)
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0xCA, 0x40, 0x48, 0xF5, 0xC3]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeDouble() {
|
|
||||||
let value = try! encoder.encode(3.14159 as Double)
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0xCB, 0x40, 0x09, 0x21, 0xF9, 0xF0, 0x1B, 0x86, 0x6E]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeString() {
|
|
||||||
let value = try! encoder.encode("hello")
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0xA5, 0x68, 0x65, 0x6C, 0x6C, 0x6F]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeFixedArray() {
|
|
||||||
let value = try! encoder.encode([1, 2, 3])
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0x93, 0x01, 0x02, 0x03]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeVariableArray() {
|
|
||||||
let value = try! encoder.encode(Array(1...16))
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0xdc] + [0x00, 0x10] + Array(0x01...0x10)))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeFixedDictionary() {
|
|
||||||
let value = try! encoder.encode(["a": 1])
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0x81, 0xA1, 0x61, 0x01]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeVariableDictionary() {
|
|
||||||
let letters = "abcdefghijklmnopqrstuvwxyz".unicodeScalars
|
|
||||||
let dictionary = Dictionary(uniqueKeysWithValues: zip(letters.map { String($0) }, 1...26))
|
|
||||||
let value = try! encoder.encode(dictionary)
|
|
||||||
XCTAssertEqual(value.count, 81)
|
|
||||||
XCTAssert(value.starts(with: [0xde] + [0x00, 0x1A]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeData() {
|
|
||||||
let data = "hello".data(using: .utf8)
|
|
||||||
let value = try! encoder.encode(data)
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0xC4, 0x05, 0x68, 0x65, 0x6C, 0x6C, 0x6F]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeDate() {
|
|
||||||
let date = Date(timeIntervalSince1970: 1)
|
|
||||||
let value = try! encoder.encode(date)
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0xD6, 0xFF, 0x00, 0x00, 0x00, 0x01]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeDistantPast() {
|
|
||||||
let date = Date.distantPast
|
|
||||||
let value = try! encoder.encode(date)
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0xC7, 0x0C, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF1, 0x88, 0x6B, 0x66, 0x00]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeDistantFuture() {
|
|
||||||
let date = Date.distantFuture
|
|
||||||
let value = try! encoder.encode(date)
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0xC7, 0x0C, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0xEC, 0x31, 0x88, 0x00]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeArrayWithDate() {
|
|
||||||
let date = Date(timeIntervalSince1970: 1)
|
|
||||||
let value = try! encoder.encode([date])
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0x91, 0xD6, 0xFF, 0x00, 0x00, 0x00, 0x01]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func testEncodeDictionaryWithDate() {
|
|
||||||
let date = Date(timeIntervalSince1970: 1)
|
|
||||||
let value = try! encoder.encode(["1": date])
|
|
||||||
XCTAssertEqual(value, Data(bytes: [0x81, 0xA1, 0x31, 0xD6, 0xFF, 0x00, 0x00, 0x00, 0x01]))
|
|
||||||
}
|
|
||||||
|
|
||||||
static var allTests = [
|
|
||||||
("testEncodeFalse", testEncodeFalse),
|
|
||||||
("testEncodeTrue", testEncodeTrue),
|
|
||||||
("testEncodeInt", testEncodeInt),
|
|
||||||
("testEncodeUInt", testEncodeUInt),
|
|
||||||
("testEncodeFloat", testEncodeFloat),
|
|
||||||
("testEncodeDouble", testEncodeDouble),
|
|
||||||
("testEncodeFixedArray", testEncodeFixedArray),
|
|
||||||
("testEncodeVariableArray", testEncodeVariableArray),
|
|
||||||
("testEncodeFixedDictionary", testEncodeFixedDictionary),
|
|
||||||
("testEncodeVariableDictionary", testEncodeVariableDictionary),
|
|
||||||
("testEncodeDate", testEncodeDate),
|
|
||||||
("testEncodeDistantPast", testEncodeDistantPast),
|
|
||||||
("testEncodeDistantFuture", testEncodeDistantFuture),
|
|
||||||
("testEncodeArrayWithDate", testEncodeArrayWithDate),
|
|
||||||
("testEncodeDictionaryWithDate", testEncodeDictionaryWithDate)
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
import XCTest
|
|
||||||
@testable import MessagePack
|
|
||||||
|
|
||||||
class MessagePackPerformanceTests: XCTestCase {
|
|
||||||
var encoder: MessagePackEncoder!
|
|
||||||
var decoder: MessagePackDecoder!
|
|
||||||
|
|
||||||
override func setUp() {
|
|
||||||
self.encoder = MessagePackEncoder()
|
|
||||||
self.decoder = MessagePackDecoder()
|
|
||||||
}
|
|
||||||
|
|
||||||
func testPerformance() {
|
|
||||||
let count = 100
|
|
||||||
let values = [Airport](repeating: .example, count: count)
|
|
||||||
|
|
||||||
self.measure {
|
|
||||||
let encoded = try! encoder.encode(values)
|
|
||||||
let decoded = try! decoder.decode([Airport].self, from: encoded)
|
|
||||||
XCTAssertEqual(decoded.count, count)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
import XCTest
|
|
||||||
@testable import MessagePack
|
|
||||||
|
|
||||||
class MessagePackRoundTripTests: XCTestCase {
|
|
||||||
var encoder: MessagePackEncoder!
|
|
||||||
var decoder: MessagePackDecoder!
|
|
||||||
|
|
||||||
override func setUp() {
|
|
||||||
self.encoder = MessagePackEncoder()
|
|
||||||
self.decoder = MessagePackDecoder()
|
|
||||||
}
|
|
||||||
|
|
||||||
func testRoundTripAirport() {
|
|
||||||
let value = Airport.example
|
|
||||||
let encoded = try! encoder.encode(value)
|
|
||||||
let decoded = try! decoder.decode(Airport.self, from: encoded)
|
|
||||||
|
|
||||||
XCTAssertEqual(value.name, decoded.name)
|
|
||||||
XCTAssertEqual(value.iata, decoded.iata)
|
|
||||||
XCTAssertEqual(value.icao, decoded.icao)
|
|
||||||
XCTAssertEqual(value.coordinates[0], decoded.coordinates[0], accuracy: 0.01)
|
|
||||||
XCTAssertEqual(value.coordinates[1], decoded.coordinates[1], accuracy: 0.01)
|
|
||||||
XCTAssertEqual(value.runways[0].direction, decoded.runways[0].direction)
|
|
||||||
XCTAssertEqual(value.runways[0].distance, decoded.runways[0].distance)
|
|
||||||
XCTAssertEqual(value.runways[0].surface, decoded.runways[0].surface)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testRoundTripParachutePack() {
|
|
||||||
struct Parachute: Codable, Equatable {
|
|
||||||
enum Canopy: String, Codable, Equatable {
|
|
||||||
case round, cruciform, rogalloWing, annular, ramAir
|
|
||||||
}
|
|
||||||
|
|
||||||
let canpoy: Canopy
|
|
||||||
let surfaceArea: Double
|
|
||||||
}
|
|
||||||
|
|
||||||
struct ParachutePack: Codable, Equatable {
|
|
||||||
let main: Parachute?
|
|
||||||
let reserve: Parachute?
|
|
||||||
}
|
|
||||||
|
|
||||||
let value = ParachutePack(main: Parachute(canpoy: .ramAir, surfaceArea: 200), reserve: nil)
|
|
||||||
let encoded = try! encoder.encode(value)
|
|
||||||
let decoded = try! decoder.decode(ParachutePack.self, from: encoded)
|
|
||||||
|
|
||||||
XCTAssertEqual(value, decoded)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testRoundTripArray() {
|
|
||||||
let count: UInt8 = 100
|
|
||||||
var bytes: [UInt8] = [0xdc, 0x00, count]
|
|
||||||
var encoded: [Int] = []
|
|
||||||
for n in 1...count {
|
|
||||||
bytes.append(n)
|
|
||||||
encoded.append(Int(n))
|
|
||||||
}
|
|
||||||
|
|
||||||
let data = Data(bytes: bytes)
|
|
||||||
let decoded = try! decoder.decode([Int].self, from: data)
|
|
||||||
XCTAssertEqual(encoded, decoded)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testRoundTripDictionary() {
|
|
||||||
let (a, z): (UInt8, UInt8) = (0x61, 0x7a)
|
|
||||||
var bytes: [UInt8] = [0xde, 0x00, 0x1A]
|
|
||||||
var encoded: [String: Int] = [:]
|
|
||||||
for n in a...z {
|
|
||||||
bytes.append(contentsOf: [0xA1, n, n])
|
|
||||||
encoded[String(Unicode.Scalar(n))] = Int(n)
|
|
||||||
}
|
|
||||||
|
|
||||||
let data = Data(bytes: bytes)
|
|
||||||
let decoded = try! decoder.decode([String: Int].self, from: data)
|
|
||||||
XCTAssertEqual(encoded, decoded)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testRoundTripDate() {
|
|
||||||
var bytes: [UInt8] = [0xD6, 0xFF]
|
|
||||||
|
|
||||||
let dateComponents = DateComponents(year: 2018, month: 4, day: 20)
|
|
||||||
let encoded = Calendar.current.date(from: dateComponents)!
|
|
||||||
|
|
||||||
let secondsSince1970 = UInt32(encoded.timeIntervalSince1970)
|
|
||||||
bytes.append(contentsOf: secondsSince1970.bytes)
|
|
||||||
|
|
||||||
let data = Data(bytes: bytes)
|
|
||||||
let decoded = try! decoder.decode(Date.self, from: data)
|
|
||||||
XCTAssertEqual(encoded, decoded)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testRoundTripDateWithNanoseconds() {
|
|
||||||
let encoded = Date()
|
|
||||||
let data = try! self.encoder.encode(encoded)
|
|
||||||
let decoded = try! self.decoder.decode(Date.self, from: data)
|
|
||||||
XCTAssertEqual(encoded.timeIntervalSinceReferenceDate, decoded.timeIntervalSinceReferenceDate, accuracy: 0.0001)
|
|
||||||
}
|
|
||||||
|
|
||||||
static var allTests = [
|
|
||||||
("testRoundTripAirport", testRoundTripAirport),
|
|
||||||
("testRoundTripArray", testRoundTripArray),
|
|
||||||
("testRoundTripDictionary", testRoundTripDictionary),
|
|
||||||
("testRoundTripDate", testRoundTripDate),
|
|
||||||
("testRoundTripDateWithNanoseconds", testRoundTripDateWithNanoseconds)
|
|
||||||
]
|
|
||||||
}
|
|
||||||
169
package-lock.json
generated
169
package-lock.json
generated
@@ -8,7 +8,7 @@
|
|||||||
"name": "bitwarden-mobile",
|
"name": "bitwarden-mobile",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"gh-pages": "^6.1.1"
|
"gh-pages": "3.2.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/array-union": {
|
"node_modules/array-union": {
|
||||||
@@ -33,11 +33,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/async": {
|
"node_modules/async": {
|
||||||
"version": "3.2.5",
|
"version": "2.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
|
||||||
"integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
|
"integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"dependencies": {
|
||||||
|
"lodash": "^4.17.14"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"node_modules/balanced-match": {
|
"node_modules/balanced-match": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
@@ -56,14 +58,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/commander": {
|
"node_modules/commander": {
|
||||||
"version": "11.1.0",
|
"version": "2.20.3",
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
||||||
"integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
|
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=16"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"node_modules/commondir": {
|
"node_modules/commondir": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
@@ -78,11 +76,10 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/email-addresses": {
|
"node_modules/email-addresses": {
|
||||||
"version": "5.0.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz",
|
||||||
"integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==",
|
"integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"license": "MIT"
|
|
||||||
},
|
},
|
||||||
"node_modules/escape-string-regexp": {
|
"node_modules/escape-string-regexp": {
|
||||||
"version": "1.0.5",
|
"version": "1.0.5",
|
||||||
@@ -150,18 +147,17 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/fs-extra": {
|
"node_modules/fs-extra": {
|
||||||
"version": "11.2.0",
|
"version": "8.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
|
||||||
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
|
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"graceful-fs": "^4.2.0",
|
"graceful-fs": "^4.2.0",
|
||||||
"jsonfile": "^6.0.1",
|
"jsonfile": "^4.0.0",
|
||||||
"universalify": "^2.0.0"
|
"universalify": "^0.1.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14.14"
|
"node": ">=6 <7 || >=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/fs.realpath": {
|
"node_modules/fs.realpath": {
|
||||||
@@ -171,18 +167,17 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/gh-pages": {
|
"node_modules/gh-pages": {
|
||||||
"version": "6.1.1",
|
"version": "3.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-6.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz",
|
||||||
"integrity": "sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw==",
|
"integrity": "sha512-jA1PbapQ1jqzacECfjUaO9gV8uBgU6XNMV0oXLtfCX3haGLe5Atq8BxlrADhbD6/UdG9j6tZLWAkAybndOXTJg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"async": "^3.2.4",
|
"async": "^2.6.1",
|
||||||
"commander": "^11.0.0",
|
"commander": "^2.18.0",
|
||||||
"email-addresses": "^5.0.0",
|
"email-addresses": "^3.0.1",
|
||||||
"filenamify": "^4.3.0",
|
"filenamify": "^4.3.0",
|
||||||
"find-cache-dir": "^3.3.1",
|
"find-cache-dir": "^3.3.1",
|
||||||
"fs-extra": "^11.1.1",
|
"fs-extra": "^8.1.0",
|
||||||
"globby": "^6.1.0"
|
"globby": "^6.1.0"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -230,11 +225,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/graceful-fs": {
|
"node_modules/graceful-fs": {
|
||||||
"version": "4.2.11",
|
"version": "4.2.8",
|
||||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
|
||||||
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
|
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"license": "ISC"
|
|
||||||
},
|
},
|
||||||
"node_modules/inflight": {
|
"node_modules/inflight": {
|
||||||
"version": "1.0.6",
|
"version": "1.0.6",
|
||||||
@@ -253,14 +247,10 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/jsonfile": {
|
"node_modules/jsonfile": {
|
||||||
"version": "6.1.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
|
||||||
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"universalify": "^2.0.0"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"graceful-fs": "^4.1.6"
|
"graceful-fs": "^4.1.6"
|
||||||
}
|
}
|
||||||
@@ -277,6 +267,12 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/lodash": {
|
||||||
|
"version": "4.17.21",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||||
|
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/make-dir": {
|
"node_modules/make-dir": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
|
||||||
@@ -452,13 +448,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/universalify": {
|
"node_modules/universalify": {
|
||||||
"version": "2.0.1",
|
"version": "0.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
|
||||||
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
|
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 10.0.0"
|
"node": ">= 4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/wrappy": {
|
"node_modules/wrappy": {
|
||||||
@@ -485,10 +480,13 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"async": {
|
"async": {
|
||||||
"version": "3.2.5",
|
"version": "2.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
|
||||||
"integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
|
"integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"lodash": "^4.17.14"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"balanced-match": {
|
"balanced-match": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
@@ -507,9 +505,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"commander": {
|
"commander": {
|
||||||
"version": "11.1.0",
|
"version": "2.20.3",
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
||||||
"integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
|
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"commondir": {
|
"commondir": {
|
||||||
@@ -525,9 +523,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"email-addresses": {
|
"email-addresses": {
|
||||||
"version": "5.0.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz",
|
||||||
"integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==",
|
"integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"escape-string-regexp": {
|
"escape-string-regexp": {
|
||||||
@@ -575,14 +573,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"fs-extra": {
|
"fs-extra": {
|
||||||
"version": "11.2.0",
|
"version": "8.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
|
||||||
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
|
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"graceful-fs": "^4.2.0",
|
"graceful-fs": "^4.2.0",
|
||||||
"jsonfile": "^6.0.1",
|
"jsonfile": "^4.0.0",
|
||||||
"universalify": "^2.0.0"
|
"universalify": "^0.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"fs.realpath": {
|
"fs.realpath": {
|
||||||
@@ -592,17 +590,17 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"gh-pages": {
|
"gh-pages": {
|
||||||
"version": "6.1.1",
|
"version": "3.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-6.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz",
|
||||||
"integrity": "sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw==",
|
"integrity": "sha512-jA1PbapQ1jqzacECfjUaO9gV8uBgU6XNMV0oXLtfCX3haGLe5Atq8BxlrADhbD6/UdG9j6tZLWAkAybndOXTJg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"async": "^3.2.4",
|
"async": "^2.6.1",
|
||||||
"commander": "^11.0.0",
|
"commander": "^2.18.0",
|
||||||
"email-addresses": "^5.0.0",
|
"email-addresses": "^3.0.1",
|
||||||
"filenamify": "^4.3.0",
|
"filenamify": "^4.3.0",
|
||||||
"find-cache-dir": "^3.3.1",
|
"find-cache-dir": "^3.3.1",
|
||||||
"fs-extra": "^11.1.1",
|
"fs-extra": "^8.1.0",
|
||||||
"globby": "^6.1.0"
|
"globby": "^6.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -634,9 +632,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"graceful-fs": {
|
"graceful-fs": {
|
||||||
"version": "4.2.11",
|
"version": "4.2.8",
|
||||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
|
||||||
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
|
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"inflight": {
|
"inflight": {
|
||||||
@@ -656,13 +654,12 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"jsonfile": {
|
"jsonfile": {
|
||||||
"version": "6.1.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
|
||||||
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"graceful-fs": "^4.1.6",
|
"graceful-fs": "^4.1.6"
|
||||||
"universalify": "^2.0.0"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"locate-path": {
|
"locate-path": {
|
||||||
@@ -674,6 +671,12 @@
|
|||||||
"p-locate": "^4.1.0"
|
"p-locate": "^4.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"lodash": {
|
||||||
|
"version": "4.17.21",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||||
|
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"make-dir": {
|
"make-dir": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
|
||||||
@@ -798,9 +801,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"universalify": {
|
"universalify": {
|
||||||
"version": "2.0.1",
|
"version": "0.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
|
||||||
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
|
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"wrappy": {
|
"wrappy": {
|
||||||
|
|||||||
@@ -6,6 +6,6 @@
|
|||||||
"clean:l10n": "git push origin --delete l10n_master"
|
"clean:l10n": "git push origin --delete l10n_master"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"gh-pages": "^6.1.1"
|
"gh-pages": "3.2.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
<AndroidEnableMultiDex>True</AndroidEnableMultiDex>
|
<AndroidEnableMultiDex>True</AndroidEnableMultiDex>
|
||||||
<UseInterpreter>False</UseInterpreter>
|
<UseInterpreter>False</UseInterpreter>
|
||||||
<DebugSymbols>False</DebugSymbols>
|
<DebugSymbols>False</DebugSymbols>
|
||||||
<RunAOTCompilation>True</RunAOTCompilation>
|
<RunAOTCompilation>False</RunAOTCompilation>
|
||||||
<AndroidSupportedAbis>armeabi-v7a;x86;x86_64;arm64-v8a</AndroidSupportedAbis>
|
<AndroidSupportedAbis>armeabi-v7a;x86;x86_64;arm64-v8a</AndroidSupportedAbis>
|
||||||
<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>
|
<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>
|
||||||
<EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk>
|
<EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:versionCode="1" android:versionName="2024.10.111" 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="2024.6.1" android:installLocation="internalOnly" package="com.x8bit.bitwarden">
|
||||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="34" />
|
<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" />
|
||||||
|
|||||||
@@ -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>2024.10.111</string>
|
<string>2024.6.1</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1</string>
|
<string>1</string>
|
||||||
<key>CFBundleIconName</key>
|
<key>CFBundleIconName</key>
|
||||||
|
|||||||
@@ -1328,7 +1328,7 @@ namespace Bit.Core.Resources.Localization {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Bitwarden help center.
|
/// Looks up a localized string similar to Bitwarden Help Center.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static string BitwardenHelpCenter {
|
public static string BitwardenHelpCenter {
|
||||||
get {
|
get {
|
||||||
|
|||||||
@@ -2753,7 +2753,7 @@ Wil u na die rekening omskakel?</value>
|
|||||||
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
|
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInWithDevice" xml:space="preserve">
|
<data name="LogInWithDevice" xml:space="preserve">
|
||||||
<value>Teken Aan met 'n ander toestel</value>
|
<value>Log in with device</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInOn" xml:space="preserve">
|
<data name="LoggingInOn" xml:space="preserve">
|
||||||
<value>Logging in on</value>
|
<value>Logging in on</value>
|
||||||
@@ -2768,7 +2768,7 @@ Wil u na die rekening omskakel?</value>
|
|||||||
<value>Account security</value>
|
<value>Account security</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||||
<value>Bitwarden help center</value>
|
<value>Bitwarden Help Center</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||||
<value>Contact Bitwarden support</value>
|
<value>Contact Bitwarden support</value>
|
||||||
@@ -2974,6 +2974,18 @@ Wil u na die rekening omskakel?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys not supported for this app</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -446,7 +446,7 @@
|
|||||||
<value>تغيير البريد الإلكتروني</value>
|
<value>تغيير البريد الإلكتروني</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeEmailConfirmation" xml:space="preserve">
|
<data name="ChangeEmailConfirmation" xml:space="preserve">
|
||||||
<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>
|
||||||
@@ -550,20 +550,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>
|
||||||
@@ -572,7 +572,7 @@
|
|||||||
<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>
|
||||||
@@ -604,13 +604,13 @@
|
|||||||
<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>
|
||||||
@@ -644,7 +644,7 @@
|
|||||||
<value>هل أنت متأكد من أنك تريد سحق كلمة المرور الموجودة؟</value>
|
<value>هل أنت متأكد من أنك تريد سحق كلمة المرور الموجودة؟</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PushNotificationAlert" xml:space="preserve">
|
<data name="PushNotificationAlert" xml:space="preserve">
|
||||||
<value>Bitwarden يحافظ تلقائيا على خزانتك في المزامنة باستخدام دفع الإخطارات. للحصول على أفضل تجربة ممكنة، يرجى اختيار "سماح" على مربع الحوار التالي عند طلب السماح بدفع الإشعارات.</value>
|
<value>bitwarden تلقائيا يحافظ على خزنتك في المزامنة باستخدام دفع الإخطارات. للحصول على أفضل تجربة ممكنة، يرجى اختيار "موافق" على مربع الحوار التالي (تفعيل دفع الإخطارات ).</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">
|
||||||
@@ -660,7 +660,7 @@
|
|||||||
<value>إعادة إدخال كلمة المرور الرئيسية</value>
|
<value>إعادة إدخال كلمة المرور الرئيسية</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchVault" xml:space="preserve">
|
<data name="SearchVault" xml:space="preserve">
|
||||||
<value>البحث في الخزانة</value>
|
<value>البحث في الخزنة</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Security" xml:space="preserve">
|
<data name="Security" xml:space="preserve">
|
||||||
<value>الأمان</value>
|
<value>الأمان</value>
|
||||||
@@ -695,7 +695,7 @@
|
|||||||
<value>فشل المزامنة.</value>
|
<value>فشل المزامنة.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SyncVaultNow" xml:space="preserve">
|
<data name="SyncVaultNow" xml:space="preserve">
|
||||||
<value>مزامنة الخزانة الآن</value>
|
<value>مزامنة الخزنة الآن</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TouchID" xml:space="preserve">
|
<data name="TouchID" xml:space="preserve">
|
||||||
<value>Touch ID معرف اتصال البصمة</value>
|
<value>Touch ID معرف اتصال البصمة</value>
|
||||||
@@ -721,7 +721,7 @@
|
|||||||
<value>عرض العنصر</value>
|
<value>عرض العنصر</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WebVault" xml:space="preserve">
|
<data name="WebVault" xml:space="preserve">
|
||||||
<value>خزانة الويب Bitwarden</value>
|
<value>خزنة الويب Bitwarden</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Lost2FAApp" xml:space="preserve">
|
<data name="Lost2FAApp" xml:space="preserve">
|
||||||
<value>هل تم فقدان تطبيق المصادقة؟</value>
|
<value>هل تم فقدان تطبيق المصادقة؟</value>
|
||||||
@@ -744,14 +744,14 @@
|
|||||||
<comment>This is used for the autofill service. ex. "Logins for twitter.com"</comment>
|
<comment>This is used for the autofill service. ex. "Logins for twitter.com"</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoItemsForUri" xml:space="preserve">
|
<data name="NoItemsForUri" xml:space="preserve">
|
||||||
<value>لا توجد عناصر في خزانتك لـ {0}.</value>
|
<value>لا توجد عناصر في خزنتك لـ {0}.</value>
|
||||||
<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>عند تحديد حقل الإدخال ومشاهدة تراكب الملء التلقائي لـ Bitwarden ، يمكنك النقر عليه لتشغيل خدمة الملء التلقائي.</value>
|
<value>عند تحديد حقل الإدخال ومشاهدة تراكب الملء التلقائي لـ Bitwarden ، يمكنك النقر عليه لتشغيل خدمة الملء التلقائي.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
|
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
|
||||||
<value>اضغط على هذا الإشعار لملء معلومات تسجيل الدخول تلقائيًا من خزانتك.</value>
|
<value>اضغط على هذا الإشعار لملء معلومات تسجيل الدخول تلقائيًا من خزنتك.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceOpenAccessibilitySettings" xml:space="preserve">
|
<data name="BitwardenAutofillServiceOpenAccessibilitySettings" xml:space="preserve">
|
||||||
<value>فتح إعدادات إمكانية الوصول</value>
|
<value>فتح إعدادات إمكانية الوصول</value>
|
||||||
@@ -778,7 +778,7 @@
|
|||||||
<value>الحالة</value>
|
<value>الحالة</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceAlert2" xml:space="preserve">
|
<data name="BitwardenAutofillServiceAlert2" xml:space="preserve">
|
||||||
<value>أسهل طريقة لإضافة تسجيلات دخول جديدة إلى خزانتك هي من خدمة التعبئة التلقائية Bitwarden تعرف على المزيد حول استخدام خدمة الملء التلقائي لـ Bitwarden عن طريق الانتقال إلى شاشة "إعدادات".</value>
|
<value>أسهل طريقة لإضافة تسجيلات دخول جديدة إلى خزنتك هي من خدمة التعبئة التلقائية Bitwarden تعرف على المزيد حول استخدام خدمة الملء التلقائي لـ Bitwarden عن طريق الانتقال إلى شاشة "إعدادات".</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Autofill" xml:space="preserve">
|
<data name="Autofill" xml:space="preserve">
|
||||||
<value>التعبئة التلقائية</value>
|
<value>التعبئة التلقائية</value>
|
||||||
@@ -949,7 +949,7 @@
|
|||||||
<value>لا يمكنك استخدام هذه الميزة حتى تقوم بتحديث مفتاح التشفير الخاص بك.</value>
|
<value>لا يمكنك استخدام هذه الميزة حتى تقوم بتحديث مفتاح التشفير الخاص بك.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EncryptionKeyMigrationRequiredDescriptionLong" xml:space="preserve">
|
<data name="EncryptionKeyMigrationRequiredDescriptionLong" xml:space="preserve">
|
||||||
<value>مطلوب ترحيل مفتاح التشفير. الرجاء تسجيل الدخول بواسطة خزانة الويب لتحديث مفتاح التشفير الخاص بك.</value>
|
<value>مطلوب ترحيل مفتاح التشفير. الرجاء تسجيل الدخول بواسطة مخزن الويب لتحديث مفتاح التشفير الخاص بك.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnMore" xml:space="preserve">
|
<data name="LearnMore" xml:space="preserve">
|
||||||
<value>اعرف المزيد</value>
|
<value>اعرف المزيد</value>
|
||||||
@@ -984,10 +984,10 @@
|
|||||||
<value>رابط الخادم</value>
|
<value>رابط الخادم</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WebVaultUrl" xml:space="preserve">
|
<data name="WebVaultUrl" xml:space="preserve">
|
||||||
<value>رابط خادم خزانة الويب</value>
|
<value>رابط خادم مخزن الويب</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
|
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
|
||||||
<value>اضغط على هذا الإشعار لعرض العناصر من الخزانة الخاصة بك.</value>
|
<value>اضغط على هذا الإشعار لعرض العناصر من الخزنة الخاصة بك.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CustomFields" xml:space="preserve">
|
<data name="CustomFields" xml:space="preserve">
|
||||||
<value>حقول مخصصة</value>
|
<value>حقول مخصصة</value>
|
||||||
@@ -1149,10 +1149,10 @@
|
|||||||
<value>ملء تلقائي باستخدام Bitwarden</value>
|
<value>ملء تلقائي باستخدام Bitwarden</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultIsLocked" xml:space="preserve">
|
<data name="VaultIsLocked" xml:space="preserve">
|
||||||
<value>الخزانة مقفلة</value>
|
<value>الخزنة مقفلة</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GoToMyVault" xml:space="preserve">
|
<data name="GoToMyVault" xml:space="preserve">
|
||||||
<value>اذهب لخزانتي</value>
|
<value>اذهب لخزنتي</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Collections" xml:space="preserve">
|
<data name="Collections" xml:space="preserve">
|
||||||
<value>المختارات</value>
|
<value>المختارات</value>
|
||||||
@@ -1301,7 +1301,7 @@
|
|||||||
<value>نوصي بتعطيل أي تطبيقات أخرى من تطبيقات التعبئة التلقائية تحت الإعدادات إذا كنت لا تخطط لاستخدامها.</value>
|
<value>نوصي بتعطيل أي تطبيقات أخرى من تطبيقات التعبئة التلقائية تحت الإعدادات إذا كنت لا تخطط لاستخدامها.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillDescription" xml:space="preserve">
|
<data name="BitwardenAutofillDescription" xml:space="preserve">
|
||||||
<value>الوصول إلى الخزانة الخاصة بك مباشرة من لوحة المفاتيح الخاصة بك لملء كلمات المرور تلقائياً بسرعة.</value>
|
<value>الوصول إلى الخزن, الخاص, بك مباشرة من لوحة المفاتيح الخاصة بك لملء كلمات المرور تلقائياً بسرعة.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTurnOn" xml:space="preserve">
|
<data name="AutofillTurnOn" xml:space="preserve">
|
||||||
<value>لتمكين التعبئة التلقائية لكلمة المرور على جهازك، اتبع هذه التعليمات:</value>
|
<value>لتمكين التعبئة التلقائية لكلمة المرور على جهازك، اتبع هذه التعليمات:</value>
|
||||||
@@ -1325,7 +1325,7 @@
|
|||||||
<value>تعبئة تلقائية لكلمة المرور</value>
|
<value>تعبئة تلقائية لكلمة المرور</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillAlert2" xml:space="preserve">
|
<data name="BitwardenAutofillAlert2" xml:space="preserve">
|
||||||
<value>أسهل طريقة لإضافة تسجيلات دخول جديدة إلى خزانتك هي من خدمة التعبئة التلقائية Bitwarden. تعرف على المزيد حول استخدام خدمة الملء التلقائي لـ Bitwarden عن طريق الانتقال إلى شاشة "إعدادات".</value>
|
<value>أسهل طريقة لإضافة تسجيلات دخول جديدة إلى خزنتك هي من خدمة التعبئة التلقائية Bitwarden. تعرف على المزيد حول استخدام خدمة الملء التلقائي لـ Bitwarden عن طريق الانتقال إلى شاشة "إعدادات".</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InvalidEmail" xml:space="preserve">
|
<data name="InvalidEmail" xml:space="preserve">
|
||||||
<value>عنوان البريد الإلكتروني غير صالح.</value>
|
<value>عنوان البريد الإلكتروني غير صالح.</value>
|
||||||
@@ -1468,10 +1468,10 @@
|
|||||||
<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="LearnOrgConfirmation" xml:space="preserve">
|
<data name="LearnOrgConfirmation" xml:space="preserve">
|
||||||
<value>يسمح لك Bitwarden بمشاركة عناصر خزانتك مع الآخرين باستخدام حساب المؤسسة. هل ترغب في زيارة موقع bitwarden.com لمعرفة المزيد؟</value>
|
<value>يسمح لك Bitwarden بمشاركة عناصر خزنتك مع الآخرين باستخدام حساب المؤسسة. هل ترغب في زيارة موقع bitwarden.com لمعرفة المزيد؟</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVault" xml:space="preserve">
|
<data name="ExportVault" xml:space="preserve">
|
||||||
<value>تصدير الخزانة</value>
|
<value>تصدير الخزنة</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LockNow" xml:space="preserve">
|
<data name="LockNow" xml:space="preserve">
|
||||||
<value>إقفل الآن</value>
|
<value>إقفل الآن</value>
|
||||||
@@ -1496,13 +1496,13 @@
|
|||||||
<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>خزانتك مقفلة. تحقق من كلمة المرور الرئيسية للمتابعة.</value>
|
<value>خزنتك مقفلة. تحقق من كلمة المرور الرئيسية للمتابعة.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultLockedPIN" xml:space="preserve">
|
<data name="VaultLockedPIN" xml:space="preserve">
|
||||||
<value>خزانتك مقفلة. تحقق من رمز PIN الخاص بك للمتابعة.</value>
|
<value>خزنتك مقفلة. تحقق من رمز PIN الخاص بك للمتابعة.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultLockedIdentity" xml:space="preserve">
|
<data name="VaultLockedIdentity" xml:space="preserve">
|
||||||
<value>خزانتك مقفلة. تحقق من هويتك للمتابعة.</value>
|
<value>خزنتك مقفلة. تحقق من هويتك للمتابعة.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Dark" xml:space="preserve">
|
<data name="Dark" xml:space="preserve">
|
||||||
<value>داكن</value>
|
<value>داكن</value>
|
||||||
@@ -1586,13 +1586,13 @@
|
|||||||
<value>اطلب إضافة تسجيل الدخول</value>
|
<value>اطلب إضافة تسجيل الدخول</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AskToAddLoginDescription" xml:space="preserve">
|
<data name="AskToAddLoginDescription" xml:space="preserve">
|
||||||
<value>اطلب إضافة عنصر إذا لم يتم العثور عليه في خزانتك.</value>
|
<value>اطلب إضافة عنصر إذا لم يتم العثور عليه في خزنتك.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OnRestart" xml:space="preserve">
|
<data name="OnRestart" xml:space="preserve">
|
||||||
<value>عند إعادة تشغيل التطبيق</value>
|
<value>عند إعادة تشغيل التطبيق</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServiceNotEnabled" xml:space="preserve">
|
<data name="AutofillServiceNotEnabled" xml:space="preserve">
|
||||||
<value>التعبئة التلقائية تجعل من السهل الوصول بشكل آمن إلى خزانة Bitwarden الخاصة بك من مواقع الويب والتطبيقات الأخرى. يبدو أنك لم تقم بتمكين خدمة التعبئة التلقائية لـ Bitwarden. تمكين التعبئة التلقائية لـ Bitwarden من شاشة "الإعدادات".</value>
|
<value>التعبئة التلقائية تجعل من السهل الوصول بشكل آمن إلى خزنة Bitwarden الخاصة بك من مواقع الويب والتطبيقات الأخرى. يبدو أنك لم تقم بتمكين خدمة التعبئة التلقائية لـ Bitwarden. تمكين التعبئة التلقائية لـ Bitwarden من شاشة "الإعدادات".</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThemeAppliedOnRestart" xml:space="preserve">
|
<data name="ThemeAppliedOnRestart" xml:space="preserve">
|
||||||
<value>سيتم تطبيق تغييرات السمة الخاصة بك عند إعادة تشغيل التطبيق.</value>
|
<value>سيتم تطبيق تغييرات السمة الخاصة بك عند إعادة تشغيل التطبيق.</value>
|
||||||
@@ -1650,7 +1650,7 @@
|
|||||||
<value>صيغة الملف</value>
|
<value>صيغة الملف</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVaultMasterPasswordDescription" xml:space="preserve">
|
<data name="ExportVaultMasterPasswordDescription" xml:space="preserve">
|
||||||
<value>أدخل كلمة المرور الرئيسية لتصدير بيانات خزانتك.</value>
|
<value>أدخل كلمة المرور الرئيسية لتصدير بيانات خزنتك.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SendVerificationCodeToEmail" xml:space="preserve">
|
<data name="SendVerificationCodeToEmail" xml:space="preserve">
|
||||||
<value>إرسال رمز التحقق إلى بريدك الإلكتروني</value>
|
<value>إرسال رمز التحقق إلى بريدك الإلكتروني</value>
|
||||||
@@ -1662,7 +1662,7 @@
|
|||||||
<value>قم بتأكيد هويتك للمتابعة.</value>
|
<value>قم بتأكيد هويتك للمتابعة.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVaultWarning" xml:space="preserve">
|
<data name="ExportVaultWarning" xml:space="preserve">
|
||||||
<value>يحتوي هذا التصدير على بيانات خزانتك بتنسيق غير مشفر. لا يجب عليك تخزين أو إرسال الملف الذي تم تصديره عبر قنوات غير آمنة (مثل البريد الإلكتروني). احذفه مباشرة بعد انتهائك من استخدامه.</value>
|
<value>يحتوي هذا التصدير على بيانات خزنتك بتنسيق غير مشفر. لا يجب عليك تخزين أو إرسال الملف الذي تم تصديره عبر قنوات غير آمنة (مثل البريد الإلكتروني). احذفه مباشرة بعد انتهائك من استخدامه.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EncExportKeyWarning" xml:space="preserve">
|
<data name="EncExportKeyWarning" xml:space="preserve">
|
||||||
<value>يقوم هذا التصدير بتشفير بياناتك باستخدام مفتاح تشفير حسابك. إذا قمت بتدوير مفتاح تشفير حسابك يجب عليك التصدير مرة أخرى لأنك لن تتمكن من فك تشفير ملف التصدير هذا.</value>
|
<value>يقوم هذا التصدير بتشفير بياناتك باستخدام مفتاح تشفير حسابك. إذا قمت بتدوير مفتاح تشفير حسابك يجب عليك التصدير مرة أخرى لأنك لن تتمكن من فك تشفير ملف التصدير هذا.</value>
|
||||||
@@ -1671,17 +1671,17 @@
|
|||||||
<value>مفاتيح تشفير الحساب فريدة من نوعها لكل حساب مستخدم Bitwarden، لذلك لا يمكنك استيراد تصدير مشفر إلى حساب آخر.</value>
|
<value>مفاتيح تشفير الحساب فريدة من نوعها لكل حساب مستخدم Bitwarden، لذلك لا يمكنك استيراد تصدير مشفر إلى حساب آخر.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVaultConfirmationTitle" xml:space="preserve">
|
<data name="ExportVaultConfirmationTitle" xml:space="preserve">
|
||||||
<value>تأكيد تصدير الخزانة</value>
|
<value>تأكيد تصدير الخزنة</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>تحذير</value>
|
<value>تحذير</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVaultFailure" xml:space="preserve">
|
<data name="ExportVaultFailure" xml:space="preserve">
|
||||||
<value>كانت هناك مشكلة في تصدير خزانتك. إذا استمرت المشكلة، ستحتاج إلى التصدير من خزانة الويب.</value>
|
<value>كانت هناك مشكلة في تصدير خزنتك. إذا استمرت المشكلة، ستحتاج إلى التصدير من خزانة الويب.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVaultSuccess" xml:space="preserve">
|
<data name="ExportVaultSuccess" xml:space="preserve">
|
||||||
<value>تم تصدير الخزانة بنجاح</value>
|
<value>تم تصدير الخزنة بنجاح</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Clone" xml:space="preserve">
|
<data name="Clone" xml:space="preserve">
|
||||||
<value>استنساخ</value>
|
<value>استنساخ</value>
|
||||||
@@ -1695,7 +1695,7 @@
|
|||||||
<comment>Button text for an open operation (verb).</comment>
|
<comment>Button text for an open operation (verb).</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnableToSaveAttachment" xml:space="preserve">
|
<data name="UnableToSaveAttachment" xml:space="preserve">
|
||||||
<value>كانت هناك مشكلة في حفظ هذا المرفق. إذا استمرت المشكلة ، يمكنك حفظها من خزانة الويب.</value>
|
<value>كانت هناك مشكلة في حفظ هذا المرفق. إذا استمرت المشكلة ، يمكنك حفظها من خزنة الويب.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SaveAttachmentSuccess" xml:space="preserve">
|
<data name="SaveAttachmentSuccess" xml:space="preserve">
|
||||||
<value>تم حفظ المرفق بنجاح</value>
|
<value>تم حفظ المرفق بنجاح</value>
|
||||||
@@ -1756,7 +1756,7 @@
|
|||||||
<value>تمكين المزامنة عند التحديث</value>
|
<value>تمكين المزامنة عند التحديث</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnableSyncOnRefreshDescription" xml:space="preserve">
|
<data name="EnableSyncOnRefreshDescription" xml:space="preserve">
|
||||||
<value>مزامنة الخزانة مع إيماءة السحب لأسفل.</value>
|
<value>مزامنة الخزنة مع إيماءة السحب لأسفل.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInSso" xml:space="preserve">
|
<data name="LogInSso" xml:space="preserve">
|
||||||
<value>تسجيل الدخول الفردي للمؤسسة</value>
|
<value>تسجيل الدخول الفردي للمؤسسة</value>
|
||||||
@@ -1774,7 +1774,7 @@
|
|||||||
<value>تعيين كلمة المرور الرئيسية</value>
|
<value>تعيين كلمة المرور الرئيسية</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetMasterPasswordSummary" xml:space="preserve">
|
<data name="SetMasterPasswordSummary" xml:space="preserve">
|
||||||
<value>من أجل إكمال تسجيل الدخول باستخدام SSO، يرجى تعيين كلمة مرور رئيسية للوصول وحماية خزانتك.</value>
|
<value>من أجل إكمال تسجيل الدخول باستخدام SSO، يرجى تعيين كلمة مرور رئيسية للوصول وحماية خزنتك.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordPolicyInEffect" xml:space="preserve">
|
<data name="MasterPasswordPolicyInEffect" xml:space="preserve">
|
||||||
<value>1 - تتطلب سياسة واحدة أو أكثر من سياسات المؤسسة كلمة مرورك الرئيسية لتلبية المتطلبات التالية:</value>
|
<value>1 - تتطلب سياسة واحدة أو أكثر من سياسات المؤسسة كلمة مرورك الرئيسية لتلبية المتطلبات التالية:</value>
|
||||||
@@ -2138,16 +2138,16 @@
|
|||||||
<value>هذه المؤسسة لديها سياسة الشركة التي ستقوم تلقائياً بتسجيلك في إعادة تعيين كلمة المرور. التسجيل سيسمح لمسؤولي المؤسسة بتغيير كلمة المرور الرئيسية الخاصة بك.</value>
|
<value>هذه المؤسسة لديها سياسة الشركة التي ستقوم تلقائياً بتسجيلك في إعادة تعيين كلمة المرور. التسجيل سيسمح لمسؤولي المؤسسة بتغيير كلمة المرور الرئيسية الخاصة بك.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
|
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
|
||||||
<value>سياسات مؤسستك تؤثر على مهلة الخزانة الخاص بك. الحد الأقصى المسموح به لمهلة الخزانة هو {0} ساعة و {1} دقيقة.</value>
|
<value>سياسات مؤسستك تؤثر على مهلة الخزنة الخاص بك. الحد الأقصى المسموح به لمهلة الخزنة هو {0} ساعة و {1} دقيقة</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
||||||
<value>سياسات مؤسستك تؤثر على مهلة خزانتك. الحد الأقصى المسموح به لمهلة الخزنة هو {0} ساعة(ساعات) و {1} دقيقة(دقائق). يتم تعيين إجراء مهلة المخزن الخاص بك إلى {2}.</value>
|
<value>سياسات مؤسستك تؤثر على مهلة خزنتك. الحد الأقصى المسموح به لمهلة الخزنة هو {0} ساعة(ساعات) و {1} دقيقة(دقائق). يتم تعيين إجراء مهلة المخزن الخاص بك إلى {2}.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
|
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
|
||||||
<value>سياسات مؤسستك قامت بتعيين إجراء مهلة خزانتك إلى {0}.</value>
|
<value>سياسات مؤسستك قامت بتعيين إجراء مهلة خزنتك إلى {0}.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutToLarge" xml:space="preserve">
|
<data name="VaultTimeoutToLarge" xml:space="preserve">
|
||||||
<value>مهلة خزانتك تتجاوز القيود التي تضعها مؤسستك.</value>
|
<value>مهلة خزنتك تتجاوز القيود التي تضعها مؤسستك.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
|
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
|
||||||
<value>واحدة أو أكثر من سياسات المؤسسة تمنعك من تصدير خزانتك الشخصية.</value>
|
<value>واحدة أو أكثر من سياسات المؤسسة تمنعك من تصدير خزانتك الشخصية.</value>
|
||||||
@@ -2258,16 +2258,16 @@
|
|||||||
<value>كلمة المرور مخفية، انقر للإظهار.</value>
|
<value>كلمة المرور مخفية، انقر للإظهار.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FilterByVault" xml:space="preserve">
|
<data name="FilterByVault" xml:space="preserve">
|
||||||
<value>تصفية العناصر حسب الخزانات</value>
|
<value>تصفية العناصر حسب الخزنات</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AllVaults" xml:space="preserve">
|
<data name="AllVaults" xml:space="preserve">
|
||||||
<value>جميع الخزانات</value>
|
<value>جميع الخزنات</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Vaults" xml:space="preserve">
|
<data name="Vaults" xml:space="preserve">
|
||||||
<value>الخزانات</value>
|
<value>الخزنات</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultFilterDescription" xml:space="preserve">
|
<data name="VaultFilterDescription" xml:space="preserve">
|
||||||
<value>الخزانة: {0}</value>
|
<value>الخزنة: {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="All" xml:space="preserve">
|
<data name="All" xml:space="preserve">
|
||||||
<value>الكل</value>
|
<value>الكل</value>
|
||||||
@@ -2307,7 +2307,7 @@
|
|||||||
حدد إضافة TOTP لتخزين المفتاح بأمان</value>
|
حدد إضافة TOTP لتخزين المفتاح بأمان</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NeverLockWarning" xml:space="preserve">
|
<data name="NeverLockWarning" xml:space="preserve">
|
||||||
<value>تعيين خيارات قفل الخاص بك إلى "مطلقا" يبقي خزانتك متاحةً لأي شخص لديه حق الوصول إلى جهازك. إذا كنت تستخدم هذا الخيار، يجب أن تتأكد من الحفاظ على حماية جهازك بشكل صحيح.</value>
|
<value>تعيين خيارات قفل الخاص بك إلى "مطلقا" يبقي خزنتك متاحةً لأي شخص لديه حق الوصول إلى جهازك. إذا كنت تستخدم هذا الخيار، يجب أن تتأكد من الحفاظ على حماية جهازك بشكل صحيح.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnvironmentPageUrlsError" xml:space="preserve">
|
<data name="EnvironmentPageUrlsError" xml:space="preserve">
|
||||||
<value>واحد أو أكثر من عناوين URL التي تم إدخالها غير صالحة. الرجاء مراجعتها ومحاولة الحفظ مرة أخرى.</value>
|
<value>واحد أو أكثر من عناوين URL التي تم إدخالها غير صالحة. الرجاء مراجعتها ومحاولة الحفظ مرة أخرى.</value>
|
||||||
@@ -2516,7 +2516,7 @@
|
|||||||
<value>تم إرسال إشعار إلى جهازك.</value>
|
<value>تم إرسال إشعار إلى جهازك.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
|
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
|
||||||
<value>الرجاء التأكد من أن الخزانة الخاصة بك غير مقفلة وأن عبارة بصمة الإصبع تتطابق على الجهاز الآخر.</value>
|
<value>الرجاء التأكد من أن الخزنة الخاصة بك غير مقفلة وأن عبارة بصمة الإصبع تتطابق على الجهاز الآخر.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ResendNotification" xml:space="preserve">
|
<data name="ResendNotification" xml:space="preserve">
|
||||||
<value>إعادة إرسال الإشعار</value>
|
<value>إعادة إرسال الإشعار</value>
|
||||||
@@ -2627,7 +2627,7 @@
|
|||||||
<value>المنطقة</value>
|
<value>المنطقة</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>كلمة المرور الرئيسية الخاصة بك لا تفي بواحدة أو أكثر من سياسات مؤسستك. من أجل الوصول إلى الخزانة، يجب عليك تحديث كلمة المرور الرئيسية الآن. سيتم تسجيل خروجك من الجلسة الحالية، مما يتطلب منك تسجيل الدخول مرة أخرى. وقد تظل الجلسات النشطة على أجهزة أخرى نشطة لمدة تصل إلى ساعة واحدة.</value>
|
<value>كلمة المرور الرئيسية الخاصة بك لا تفي بواحدة أو أكثر من سياسات مؤسستك. من أجل الوصول إلى الخزنة، يجب عليك تحديث كلمة المرور الرئيسية الآن. سيتم تسجيل خروجك من الجلسة الحالية، مما يتطلب منك تسجيل الدخول مرة أخرى. وقد تظل الجلسات النشطة على أجهزة أخرى نشطة لمدة تصل إلى ساعة واحدة.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>كلمة المرور الرئيسية الحالية</value>
|
<value>كلمة المرور الرئيسية الحالية</value>
|
||||||
@@ -2702,7 +2702,7 @@
|
|||||||
<value>تسجيل الدخول كـ {0}</value>
|
<value>تسجيل الدخول كـ {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
||||||
<value>تَغيير إجراء مهلة خزانتك لتسجيل الخروج</value>
|
<value>تَغيير إجراء مهلة المخزن لتسجيل الخروج</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BlockAutoFill" xml:space="preserve">
|
<data name="BlockAutoFill" xml:space="preserve">
|
||||||
<value>حظر التعبئة التلقائية</value>
|
<value>حظر التعبئة التلقائية</value>
|
||||||
@@ -2760,7 +2760,7 @@
|
|||||||
<value>جارٍ تسجيل الدخول</value>
|
<value>جارٍ تسجيل الدخول</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Vault" xml:space="preserve">
|
<data name="Vault" xml:space="preserve">
|
||||||
<value>الخزانة</value>
|
<value>الخزنة</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Appearance" xml:space="preserve">
|
<data name="Appearance" xml:space="preserve">
|
||||||
<value>المظهر</value>
|
<value>المظهر</value>
|
||||||
@@ -2809,7 +2809,7 @@
|
|||||||
<value>{0} ساعات</value>
|
<value>{0} ساعات</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
||||||
<value>استخدم Bitwarden لحفظ مفاتيح المرور الجديدة وتسجيل الدخول باستخدام مفاتيح المرور المخزنة في خزانتك.</value>
|
<value>استخدم Bitwarden لحفظ مفاتيح المرور الجديدة وتسجيل الدخول باستخدام مفاتيح المرور المخزنة في المخزن الخاص بك.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||||
<value>يتم استخدام إطار التعبئة التلقائية لأندرويد للمساعدة في ملء معلومات تسجيل الدخول في تطبيقات أخرى على جهازك.</value>
|
<value>يتم استخدام إطار التعبئة التلقائية لأندرويد للمساعدة في ملء معلومات تسجيل الدخول في تطبيقات أخرى على جهازك.</value>
|
||||||
@@ -2865,7 +2865,7 @@
|
|||||||
<value>استكشف المزيد من الميزات لحساب Bitwarden الخاص بك على تطبيق الويب.</value>
|
<value>استكشف المزيد من الميزات لحساب Bitwarden الخاص بك على تطبيق الويب.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
||||||
<value>يتيح لك Bitwarden مشاركة عناصر خزانتك مع الآخرين باستخدام حساب المؤسسة. تعرف على المزيد على موقع bitwarden.com على شبكة الإنترنت.</value>
|
<value>يتيح لك Bitwarden مشاركة عناصر خزنتك مع الآخرين باستخدام حساب المؤسسة. تعرف على المزيد على موقع bitwarden.com على شبكة الإنترنت.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RateAppDescriptionLong" xml:space="preserve">
|
<data name="RateAppDescriptionLong" xml:space="preserve">
|
||||||
<value>ساعد الآخرين في معرفة ما إذا كان Bitwarden مناسبا لهم. قم بزيارة متجر التطبيقات وترك التقييم الآن.</value>
|
<value>ساعد الآخرين في معرفة ما إذا كان Bitwarden مناسبا لهم. قم بزيارة متجر التطبيقات وترك التقييم الآن.</value>
|
||||||
@@ -2975,6 +2975,18 @@
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>سيتم حفظ مفتاح المرور الخاص بك في مخزن Bitwarden الخاص بك لـ {0}</value>
|
<value>سيتم حفظ مفتاح المرور الخاص بك في مخزن Bitwarden الخاص بك لـ {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>عناصر المؤسسة غير المعينة لم تعد مرئية في عرض جميع المستودعات ويمكن الوصول إليها فقط عن طريق لوحة التحكم. تعيين هذه العناصر لمجموعة من وحدة تحكم المدير لجعلها مرئية.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>في 16 مايو 2024، لن تكون عناصر المؤسسة غير المعينة مرئية في عرض جميع المستودعات ويمكن الوصول إليها فقط عن طريق مدير النظام. تعيين هذه العناصر لمجموعة من وحدة تحكم المدير لجعلها مرئية.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>ذكرني لاحقاً</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>إشعار</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>مفاتيح المرور غير مدعومة لهذا التطبيق</value>
|
<value>مفاتيح المرور غير مدعومة لهذا التطبيق</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -296,7 +296,7 @@
|
|||||||
<comment>Text to define that there are more options things to see.</comment>
|
<comment>Text to define that there are more options things to see.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="MyVault" xml:space="preserve">
|
<data name="MyVault" xml:space="preserve">
|
||||||
<value>Seyfim</value>
|
<value>Anbarım</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">
|
||||||
@@ -364,14 +364,14 @@
|
|||||||
<comment>Label for a uri/url.</comment>
|
<comment>Label for a uri/url.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseFingerprintToUnlock" xml:space="preserve">
|
<data name="UseFingerprintToUnlock" xml:space="preserve">
|
||||||
<value>Kilidi açmaq üçün barmaq izi istifadə et</value>
|
<value>Kilidi barmaq izi ilə açın</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Username" xml:space="preserve">
|
<data name="Username" xml:space="preserve">
|
||||||
<value>İstifadəçi adı</value>
|
<value>İstifadəçi adı</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} xanası tələb olunur.</value>
|
<value>{0} sahəsi lazımlıdır.</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">
|
||||||
@@ -431,7 +431,7 @@
|
|||||||
<value>Bitwarden tətbiq uzantısı</value>
|
<value>Bitwarden tətbiq uzantısı</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
||||||
<value>Seyfinizə yeni bir giriş ə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>
|
<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>
|
||||||
@@ -446,7 +446,7 @@
|
|||||||
<value>E-poçtu dəyişdir</value>
|
<value>E-poçtu dəyişdir</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeEmailConfirmation" xml:space="preserve">
|
<data name="ChangeEmailConfirmation" xml:space="preserve">
|
||||||
<value>E-poçt ünvanınızı bitwarden.com veb seyfində dəyişdirə bilərsiniz. İndi saytı ziyarət etmək istəyirsiniz?</value>
|
<value>E-poçt ünvanınızı bitwarden.com veb anbarında dəyişdirə bilərsiniz. İndi saytı ziyarət etmək istəyirsiniz?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeMasterPassword" xml:space="preserve">
|
<data name="ChangeMasterPassword" xml:space="preserve">
|
||||||
<value>Ana parolu dəyişdir</value>
|
<value>Ana parolu dəyişdir</value>
|
||||||
@@ -468,7 +468,7 @@
|
|||||||
<value>Elementə düzəliş et</value>
|
<value>Elementə düzəliş et</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnableAutomaticSyncing" xml:space="preserve">
|
<data name="EnableAutomaticSyncing" xml:space="preserve">
|
||||||
<value>Avto-sinxrn icazə ver</value>
|
<value>Avto-sinxr icazə ver</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnterEmailForHint" xml:space="preserve">
|
<data name="EnterEmailForHint" xml:space="preserve">
|
||||||
<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>
|
||||||
@@ -520,7 +520,7 @@
|
|||||||
<value>Elementləri daxilə köçür</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 seyfindən elementləri toplu formada daxilə köçürə 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 daxilə köçürün.</value>
|
<value>Digər parol idarəetmə tətbiqlərindəki elementləri cəld və toplu formada daxilə köçürün.</value>
|
||||||
@@ -550,20 +550,20 @@
|
|||||||
<value>Dərhal</value>
|
<value>Dərhal</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeout" xml:space="preserve">
|
<data name="VaultTimeout" xml:space="preserve">
|
||||||
<value>Seyf vaxtının bitməsi</value>
|
<value>Anbara müraciət bitəcək</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutAction" xml:space="preserve">
|
<data name="VaultTimeoutAction" xml:space="preserve">
|
||||||
<value>Seyf 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ış etdikdə, seyfinizə 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>
|
<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>
|
||||||
<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>Güvənli seyfinizə müraciət etmək üçün giriş edin və ya yeni bir hesab yaradın.</value>
|
<value>Güvənli anbarınıza müraciət etmək üçün giriş edin və ya yeni bir hesab yaradın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Manage" xml:space="preserve">
|
<data name="Manage" xml:space="preserve">
|
||||||
<value>İdarə et</value>
|
<value>İdarə et</value>
|
||||||
@@ -572,7 +572,7 @@
|
|||||||
<value>Parol təsdiqləmə doğru deyil.</value>
|
<value>Parol təsdiqləmə doğru deyil.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordDescription" xml:space="preserve">
|
<data name="MasterPasswordDescription" xml:space="preserve">
|
||||||
<value>Ana parol, seyfinizə müraciət etmək üçün istifadə edəcəyiniz paroldur. Ana parolu yadda saxlamaq çox vacibdir. Unutsanız, parolu bərpa etməyin heç bir yolu yoxdur.</value>
|
<value>Ana parol, anbarınıza müraciət etmək üçün istifadə edəcəyiniz şifrədir. Ana parolu yadda saxlamaq çox vacibdir. Unutsanız, parolu bərpa etməyin heç bir yolu yoxdur.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordHint" xml:space="preserve">
|
<data name="MasterPasswordHint" xml:space="preserve">
|
||||||
<value>Ana parol məsləhəti (ixtiyari)</value>
|
<value>Ana parol məsləhəti (ixtiyari)</value>
|
||||||
@@ -604,13 +604,13 @@
|
|||||||
<value>Yeni element yaradıldı.</value>
|
<value>Yeni element yaradıldı.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoFavorites" xml:space="preserve">
|
<data name="NoFavorites" xml:space="preserve">
|
||||||
<value>Seyfinizdə heç bir sevimli yoxdur.</value>
|
<value>Anbarınızda heç bir sevimli yoxdur.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoItems" xml:space="preserve">
|
<data name="NoItems" xml:space="preserve">
|
||||||
<value>Seyfinizdə heç bir element yoxdur.</value>
|
<value>Anbarınızda heç bir element yoxdur.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoItemsTap" xml:space="preserve">
|
<data name="NoItemsTap" xml:space="preserve">
|
||||||
<value>Seyfinizdə bu veb sayt/tətbiq üçün heç bir element yoxdur. Əlavə etmək üçün toxunun.</value>
|
<value>Anbarınızda bu veb sayt/tətbiq üçün heç bir element yoxdur. Əlavə etmək üçün toxunun.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
|
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
|
||||||
<value>Bu hesaba aid istifadəçi adı və ya parol yoxdur.</value>
|
<value>Bu hesaba aid istifadəçi adı və ya parol yoxdur.</value>
|
||||||
@@ -644,7 +644,7 @@
|
|||||||
<value>Hazırkı parolun üzərinə yazmaq istədiyinizə əminsiniz?</value>
|
<value>Hazırkı parolun üzərinə yazmaq istədiyinizə əminsiniz?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PushNotificationAlert" xml:space="preserve">
|
<data name="PushNotificationAlert" xml:space="preserve">
|
||||||
<value>Bitwarden, ani bildirişləri istifadə edərək seyfinizi avtomatik olaraq sinxron tutur. Mümkün olan ən yaxşı təcrübə üçün, sizdən ani bildirişlərə icazə vermək istənildikdə lütfən istək pəncərəsində "İcazə ver"i seçin.</value>
|
<value>Bitwarden, ani bildirişləri istifadə edərək anbarınızın avtomatik sinxronlaşdırılmasını təmin edir. Mümkün olan ən yaxşı təcrübəni təqdim etmək üçün, sizdən ani bildirişləri fəallaşdırmağı soruşduqda növbəti ekranda "İcazə ver"i seçin.</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">
|
||||||
@@ -660,7 +660,7 @@
|
|||||||
<value>Ana parolu yenidən yaz</value>
|
<value>Ana parolu yenidən yaz</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchVault" xml:space="preserve">
|
<data name="SearchVault" xml:space="preserve">
|
||||||
<value>Seyfdə axtar</value>
|
<value>Anbarda axtar</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Security" xml:space="preserve">
|
<data name="Security" xml:space="preserve">
|
||||||
<value>Güvənlik</value>
|
<value>Güvənlik</value>
|
||||||
@@ -695,7 +695,7 @@
|
|||||||
<value>Sinxr uğursuz oldu</value>
|
<value>Sinxr uğursuz oldu</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SyncVaultNow" xml:space="preserve">
|
<data name="SyncVaultNow" xml:space="preserve">
|
||||||
<value>Seyfi indi sinxronlaşdır</value>
|
<value>Anbarı indi sinxronlaşdır</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TouchID" xml:space="preserve">
|
<data name="TouchID" xml:space="preserve">
|
||||||
<value>Touch ID</value>
|
<value>Touch ID</value>
|
||||||
@@ -705,10 +705,10 @@
|
|||||||
<value>İki mərhələli giriş</value>
|
<value>İki mərhələli giriş</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnlockWith" xml:space="preserve">
|
<data name="UnlockWith" xml:space="preserve">
|
||||||
<value>Kilidi {0} ilə aç</value>
|
<value>{0} ilə kilidi açın</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnlockWithPIN" xml:space="preserve">
|
<data name="UnlockWithPIN" xml:space="preserve">
|
||||||
<value>Kilidi PIN kodla aç</value>
|
<value>PIN kod ilə kilidi açın</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Validating" xml:space="preserve">
|
<data name="Validating" xml:space="preserve">
|
||||||
<value>Doğrulanır</value>
|
<value>Doğrulanır</value>
|
||||||
@@ -721,7 +721,7 @@
|
|||||||
<value>Elementə bax</value>
|
<value>Elementə bax</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WebVault" xml:space="preserve">
|
<data name="WebVault" xml:space="preserve">
|
||||||
<value>Bitwarden veb seyfi</value>
|
<value>Bitwarden veb anbarı</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Lost2FAApp" xml:space="preserve">
|
<data name="Lost2FAApp" xml:space="preserve">
|
||||||
<value>Kimlik doğrulayıcı tətbiqini itirmisiniz?</value>
|
<value>Kimlik doğrulayıcı tətbiqini itirmisiniz?</value>
|
||||||
@@ -744,14 +744,14 @@
|
|||||||
<comment>This is used for the autofill service. ex. "Logins for twitter.com"</comment>
|
<comment>This is used for the autofill service. ex. "Logins for twitter.com"</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoItemsForUri" xml:space="preserve">
|
<data name="NoItemsForUri" xml:space="preserve">
|
||||||
<value>Seyfinizdə {0} üçün heç bir element yoxdur.</value>
|
<value>Anbarınızda {0} üçün heç bir element yoxdur.</value>
|
||||||
<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>Bir giriş xanası seçdikdə və Bitwarden avto-doldurma örtüyünü gördükdə, avto-doldurma xidmətini başlatmaq üçün buna toxuna bilərsiniz.</value>
|
<value>Bir giriş xanası seçdikdə və Bitwarden avto-doldurma örtüyünü gördükdə, avto-doldurma xidmətini başlatmaq üçün buna toxuna bilərsiniz.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
|
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
|
||||||
<value>Bir elementi seyfinizdən 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 Ayarlarını aç</value>
|
<value>Əlçatımlılıq Ayarlarını aç</value>
|
||||||
@@ -778,7 +778,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>Seyfinizə yeni bir giriş əlavə etməyin ən asan yolu, Bitwarden Avto-doldurma Xidmətidir. Bitwarden Avto-doldurma Xidmətini istifadə etməklə bağlı daha ətraflı məlumat üçün "Ayarlar" 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>
|
||||||
@@ -949,7 +949,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 lütfən veb seyfinizə 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>
|
||||||
@@ -984,13 +984,13 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Server URL-si</value>
|
<value>Server URL-si</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WebVaultUrl" xml:space="preserve">
|
<data name="WebVaultUrl" xml:space="preserve">
|
||||||
<value>Veb seyf server URL-si</value>
|
<value>Veb anbar server URL-si</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
|
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
|
||||||
<value>Seyfinizdəki elementlərə baxmaq üçün bu bildirişə toxunun.</value>
|
<value>Anbarınızdakı elementlərə baxmaq üçün bu bildirişə toxunun.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CustomFields" xml:space="preserve">
|
<data name="CustomFields" xml:space="preserve">
|
||||||
<value>Özəl xanalar</value>
|
<value>Özəl sahələr</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyNumber" xml:space="preserve">
|
<data name="CopyNumber" xml:space="preserve">
|
||||||
<value>Nömrəni kopyala</value>
|
<value>Nömrəni kopyala</value>
|
||||||
@@ -1149,10 +1149,10 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Bitwarden ilə avto-doldurma</value>
|
<value>Bitwarden ilə avto-doldurma</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultIsLocked" xml:space="preserve">
|
<data name="VaultIsLocked" xml:space="preserve">
|
||||||
<value>Seyf kilidlənib</value>
|
<value>Anbar kilidlənib</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GoToMyVault" xml:space="preserve">
|
<data name="GoToMyVault" xml:space="preserve">
|
||||||
<value>Seyfimə get</value>
|
<value>Anbarıma get</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Collections" xml:space="preserve">
|
<data name="Collections" xml:space="preserve">
|
||||||
<value>Kolleksiyalar</value>
|
<value>Kolleksiyalar</value>
|
||||||
@@ -1170,7 +1170,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Avto-doldurma əlçatımlılıq xidməti</value>
|
<value>Avto-doldurma əlçatımlılıq xidməti</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServiceDescription" xml:space="preserve">
|
<data name="AutofillServiceDescription" xml:space="preserve">
|
||||||
<value>Bitwarden avto-doldurma xidməti, cihazınızdakı digər tətbiqlərə giriş məlumatlarını doldurmağa kömək edən Android Avto-doldurma Çərçivəsini istifadə edir.</value>
|
<value>Bitwarden avto-doldurma xidməti, giriş məlumatlarının cihazınızdakı digər tətbiqlərdə doldurmasına kömək etməsi üçün Android Avto-doldurma Çərçivəsini istifadə edir.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
|
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
|
||||||
<value>Giriş məlumatlarını digər tətbiqlərdə doldurmaq üçün Bitwarden avto-doldurma xidmətini istifadə edin.</value>
|
<value>Giriş məlumatlarını digər tətbiqlərdə doldurmaq üçün Bitwarden avto-doldurma xidmətini istifadə edin.</value>
|
||||||
@@ -1201,7 +1201,7 @@ Skan prosesi avtomatik baş tutacaq.</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>
|
<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 xana adı</value>
|
<value>Özəl sahə adı</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FieldTypeBoolean" xml:space="preserve">
|
<data name="FieldTypeBoolean" xml:space="preserve">
|
||||||
<value>Boolean</value>
|
<value>Boolean</value>
|
||||||
@@ -1216,10 +1216,10 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Mətn</value>
|
<value>Mətn</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NewCustomField" xml:space="preserve">
|
<data name="NewCustomField" xml:space="preserve">
|
||||||
<value>Yeni özəl xana</value>
|
<value>Yeni özəl sahə</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SelectTypeField" xml:space="preserve">
|
<data name="SelectTypeField" xml:space="preserve">
|
||||||
<value>Necə bir özəl xana əlavə etmək istəyirsiniz?</value>
|
<value>Necə bir özəl sahə əlavə etmək istəyirsiniz?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Remove" xml:space="preserve">
|
<data name="Remove" xml:space="preserve">
|
||||||
<value>Çıxart</value>
|
<value>Çıxart</value>
|
||||||
@@ -1301,7 +1301,7 @@ Skan prosesi avtomatik baş tutacaq.</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>
|
<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ı cəld avto-doldurmaq üçün seyfinizə 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>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTurnOn" xml:space="preserve">
|
<data name="AutofillTurnOn" xml:space="preserve">
|
||||||
<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>
|
||||||
@@ -1325,7 +1325,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>Seyfinizə yeni bir giriş əlavə etməyin ən asan yolu, Bitwarden Parol Avto-doldurma uzantısıdır. Bitwarden Parol Avto-doldurma uzantısı haqqında daha ətraflı məlumat üçün "Ayarlar" 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>
|
||||||
@@ -1468,10 +1468,10 @@ Skan prosesi avtomatik baş tutacaq.</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="LearnOrgConfirmation" xml:space="preserve">
|
<data name="LearnOrgConfirmation" xml:space="preserve">
|
||||||
<value>Bitwarden, bir təşkilat hesabı istifadə edərək seyf elementlərinizi başqaları ilə paylaşmağınıza icazə verir. 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>Seyfi xaricə köçür</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,7 +1483,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Kilidi aç</value>
|
<value>Kilidi aç</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnlockVault" xml:space="preserve">
|
<data name="UnlockVault" xml:space="preserve">
|
||||||
<value>Seyfin kilidini aç</value>
|
<value>Anbar kilidini aç</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThirtyMinutes" xml:space="preserve">
|
<data name="ThirtyMinutes" xml:space="preserve">
|
||||||
<value>30 dəqiqə</value>
|
<value>30 dəqiqə</value>
|
||||||
@@ -1496,13 +1496,13 @@ Skan prosesi avtomatik baş tutacaq.</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>Seyfiniz kilidlənib. Davam etmək üçün ana parolunuzu doğrulayın.</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>Seyfiniz kilidlənib. Davam etmək üçün PIN kodunuzu doğrulayın.</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>Seyfiniz kilidlənib. Davam etmək üçün kimliyinizi doğrulayın.</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>
|
||||||
@@ -1540,7 +1540,7 @@ Skan prosesi avtomatik baş tutacaq.</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>Avto-doldurma kimi əməliyyatları icra edərkən giriş etmə prosesi üçün URI uyuşma aşkarlamasının idarə ediləcəyi ilkin yolu seçin.</value>
|
<value>Avto-doldurma kimi əməliyyatları icra edərkən giriş etmə prosesi üçün URI uyuşma aşkarlamasının idarə edliəcəyi ilkin yolu seçin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Theme" xml:space="preserve">
|
<data name="Theme" xml:space="preserve">
|
||||||
<value>Tema</value>
|
<value>Tema</value>
|
||||||
@@ -1586,13 +1586,13 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Giriş əlavə etmək üçün soruş</value>
|
<value>Giriş əlavə etmək üçün soruş</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AskToAddLoginDescription" xml:space="preserve">
|
<data name="AskToAddLoginDescription" xml:space="preserve">
|
||||||
<value>Seyfinizdə tapılmayan elementin əlavə edilməsi soruşulsun.</value>
|
<value>Anbarınızda yoxdursa, bir element əlavə etməyi soruşun.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OnRestart" xml:space="preserve">
|
<data name="OnRestart" xml:space="preserve">
|
||||||
<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, digər veb sayt və tətbiqlərdən Bitwarden seyfinizə 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>
|
<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>
|
||||||
@@ -1623,7 +1623,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Biometrik</value>
|
<value>Biometrik</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseBiometricsToUnlock" xml:space="preserve">
|
<data name="UseBiometricsToUnlock" xml:space="preserve">
|
||||||
<value>Kilidi açmaq üçün biometrik istifadə et</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 ayarlarında "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>
|
||||||
@@ -1650,7 +1650,7 @@ 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>Seyf datanızı xaricə köçürmə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>Doğrulama kodunu e-poçtunuza göndərin</value>
|
<value>Doğrulama kodunu e-poçtunuza göndərin</value>
|
||||||
@@ -1671,17 +1671,17 @@ Skan prosesi avtomatik baş tutacaq.</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>
|
<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>Seyfi xaricə köçürməyi təsdiqlə</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>Seyfin xaricə köçürülməsi zamanı problem yarandı. Əgər problem davam edərsə, veb seyfinizdən xaricə köçürmə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>Seyf uğurla xaricə köçürüldü</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>
|
|||||||
<comment>Button text for an open operation (verb).</comment>
|
<comment>Button text for an open operation (verb).</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnableToSaveAttachment" xml:space="preserve">
|
<data name="UnableToSaveAttachment" xml:space="preserve">
|
||||||
<value>Bu qoşmanı saxlayarkən problem yarandı. Əgər problem davam edərsə, veb seyfdən saxlaya bilərsiniz.</value>
|
<value>Bu qoşmanı saxlayarkən problem yarandı. Əgər problem davam edərsə, veb anbarından saxlaya bilərsiniz.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SaveAttachmentSuccess" xml:space="preserve">
|
<data name="SaveAttachmentSuccess" xml:space="preserve">
|
||||||
<value>Qoşma uğurla saxlanıldı</value>
|
<value>Qoşma uğurla saxlanıldı</value>
|
||||||
@@ -1704,7 +1704,7 @@ Skan prosesi avtomatik baş tutacaq.</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>
|
<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>Parol xanası aşkarlanmadı</value>
|
<value>Heç bir parol sahəsi aşkarlanmadı</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SoftDeleting" xml:space="preserve">
|
<data name="SoftDeleting" xml:space="preserve">
|
||||||
<value>Tullantı qutusuna göndərilir...</value>
|
<value>Tullantı qutusuna göndərilir...</value>
|
||||||
@@ -1753,16 +1753,16 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Ana parolun doğrulanması 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ə zamanı sinxrn icazə ver</value>
|
<value>Təzələmə zamanı sinxr icazə ver</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnableSyncOnRefreshDescription" xml:space="preserve">
|
<data name="EnableSyncOnRefreshDescription" xml:space="preserve">
|
||||||
<value>Barmağınızla aşağı çəkdikdə seyfi sinxronlaşdır.</value>
|
<value>Barmağınızla aşağı çəkdikdə anbarı sinxronlaşdır.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInSso" xml:space="preserve">
|
<data name="LogInSso" xml:space="preserve">
|
||||||
<value>Müəssisə üçün vahid 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 vahid daxil olma portalını istifadə edərək cəld giriş edin. Başlatmaq üçün lütfən 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>
|
||||||
@@ -1774,7 +1774,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Ana parolu ayarla</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 lütfən seyfinizə müraciət edəcək və onu qoruyacaq bir ana parol təyin edin.</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>
|
||||||
@@ -1822,16 +1822,16 @@ Skan prosesi avtomatik baş tutacaq.</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>
|
<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="PasskeyManagement" xml:space="preserve">
|
<data name="PasskeyManagement" xml:space="preserve">
|
||||||
<value>Keçid açarını idarəetmə</value>
|
<value>Keçid açarının idarə edilməsi</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>
|
||||||
</data>
|
</data>
|
||||||
<data name="InlineAutofill" xml:space="preserve">
|
<data name="InlineAutofill" xml:space="preserve">
|
||||||
<value>Sətirdaxili avto-doldurmanı istifadə et</value>
|
<value>Sətir daxili avto-doldurmanı istifadə edin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InlineAutofillDescription" xml:space="preserve">
|
<data name="InlineAutofillDescription" xml:space="preserve">
|
||||||
<value>Seçdiyiniz IME (klaviatura) dəstəkləyirsə sətirdaxili avto-doldurmanı istifadə edin. Əgər konfiqurasiyanız dəstəkləmirsə (və ya bu seçim söndürülübsə) ilkin Avto-doldurma örtüyü istifadə ediləcəkdir.</value>
|
<value>Seçdiyiniz IME (klaviatura) dəstəkləyirsə sətir daxili avto-doldurmanı istifadə edə bilərsiniz. Əgər konfiqurasiyanız dəstəkləmirsə (və ya bu seçim sıradan çıxarılıbsa) ilkin Avto-doldurma qutusu istifadə ediləcəkdir.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Accessibility" xml:space="preserve">
|
<data name="Accessibility" xml:space="preserve">
|
||||||
<value>Əlçatımlılığı istifadə et</value>
|
<value>Əlçatımlılığı istifadə et</value>
|
||||||
@@ -1843,16 +1843,16 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Saytda və vebdə giriş məlumatlarınızı avto-doldurmaq üçün Bitwarden Əlçatımlılıq Xidmətini istifadə edin. ("Üzərində göstər" seçimi açıq olmalıdır)</value>
|
<value>Saytda və vebdə giriş məlumatlarınızı avto-doldurmaq üçün Bitwarden Əlçatımlılıq Xidmətini istifadə edin. ("Üzərində göstər" seçimi açıq olmalıdır)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDescription3" xml:space="preserve">
|
<data name="AccessibilityDescription3" xml:space="preserve">
|
||||||
<value>Avto-doldurma Cəld Əməliyyat Xanasını istifadə etmək üçün Bitwarden Əlçatımlılıq Xidmətini istifadə edin və/və ya "Üzərində göstər"i (əgər açıqdırsa) istifadə edərək açılan bir pəncərədə göstərin.</value>
|
<value>Avto-doldurma cəld əməliyyat qutusunu istifadə etmək üçün Bitwarden əlçatımlılıq xidmətini istifadə edin və/və ya "Üzərində göstər"i (əgər fəaldırsa) istifadə edərək açılan bir pəncərə göstərə bilərsiniz.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDescription4" xml:space="preserve">
|
<data name="AccessibilityDescription4" xml:space="preserve">
|
||||||
<value>Avto-doldurma Cəld Əməliyyat Xanasını istifadə etmək və ya "Üzərində göstər"i (əgər açıqdırsa) istifadə edərək Avto-doldurma xidmətini təqlid etmək üçün tələb olunur.</value>
|
<value>Avto-doldurma cəld əməliyyat qutusunu istifadə etmək və ya "Üzərində göstər"i (əgər fəaldırsa) istifadə edərək Avto-doldurma xidmətini təqlid etmək tələb olunur.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DrawOver" xml:space="preserve">
|
<data name="DrawOver" xml:space="preserve">
|
||||||
<value>"Üzərində göstər"i istifadə edin</value>
|
<value>"Üzərində göstər"i istifadə edin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DrawOverDescription" xml:space="preserve">
|
<data name="DrawOverDescription" xml:space="preserve">
|
||||||
<value>Giriş xanaları seçildikdə, Bitwarden Əlçatımlılıq Xidmətinin açılan bir pəncərə göstərməsinə icazə verir.</value>
|
<value>Giriş xanalarını seçdikdə Bitwarden Əlçatımlılıq Xidmətinin açılan pəncərə göstərməsinə icazə verir.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DrawOverDescription2" xml:space="preserve">
|
<data name="DrawOverDescription2" xml:space="preserve">
|
||||||
<value>İşə salındıqda Bitwarden Əlçatımlılıq Xidməti, giriş məlumatlarınızın avto-doldurmasına kömək etmək üçün giriş xanaları seçildikdə açılan pəncərə göstərəcək.</value>
|
<value>İşə salındıqda Bitwarden Əlçatımlılıq Xidməti, giriş məlumatlarınızın avto-doldurmasına kömək etmək üçün giriş xanaları seçildikdə açılan pəncərə göstərəcək.</value>
|
||||||
@@ -1861,7 +1861,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Fəal olsa, əlçatımlılıq, Android Avto-doldurma Çərçivəsini dəstəkləməyən köhnə tətbiqlərdə Avto-doldurma Xidmətini təqlid etməsi üçün açılan bir pəncərə göstərəcək.</value>
|
<value>Fəal olsa, əlçatımlılıq, Android Avto-doldurma Çərçivəsini dəstəkləməyən köhnə tətbiqlərdə Avto-doldurma Xidmətini təqlid etməsi üçün açılan bir pəncərə göstərəcək.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PersonalOwnershipSubmitError" xml:space="preserve">
|
<data name="PersonalOwnershipSubmitError" xml:space="preserve">
|
||||||
<value>Müəssisə siyasətinə görə, elementləri şəxsi seyfinizdə saxlamağınız məhdudlaşdırılıb. Sahiblik seçimini təşkilat olaraq dəyişdirin və mövcud kolleksiyalar arasından seçim edin.</value>
|
<value>Müəssisə Siyasətinə görə, elementləri şəxsi anbarınızda saxlamağınız məhdudlaşdırılıb. Sahiblik seçimini təşkilat olaraq dəyişdirin və mövcud kolleksiyalar arasından seçim edin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PersonalOwnershipPolicyInEffect" xml:space="preserve">
|
<data name="PersonalOwnershipPolicyInEffect" xml:space="preserve">
|
||||||
<value>Bir təşkilat siyasəti, sahiblik seçimlərinizə təsir edir.</value>
|
<value>Bir təşkilat siyasəti, sahiblik seçimlərinizə təsir edir.</value>
|
||||||
@@ -2067,7 +2067,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>Faylları "Send" ilə istifadə etmək üçün e-poçtunuzu doğrulamalısınız. E-poçtunuzu veb seyfdə doğrulaya 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">
|
||||||
@@ -2092,7 +2092,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Ana parolu güncəllə</value>
|
<value>Ana parolu güncəllə</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UpdateMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Ana parolunuz təzəlikcə təşkilatınızdakı bir administrator tərəfindən dəyişdirildi. Seyfə müraciət üçün Ana parolunuzu indi güncəlləməlisiniz. Davam etsəniz, hazırkı seansdan çıxış etmiş və təkrar giriş etməli olacaqsınız. Digər cihazlardakı aktiv seanslar bir saata qədər aktiv qalmağa davam edə bilər.</value>
|
<value>Ana parolunuz təzəlikcə təşkilatınızdakı bir administrator tərəfindən dəyişdirildi. Anbara müraciət üçün Ana parolunuzu indi güncəlləməlisiniz. Davam etsəniz, hazırkı seansdan çıxış etmiş və təkrar giriş etməli olacaqsınız. Digər cihazlardakı aktiv seanslar bir saata qədər aktiv qalmağa davam edə bilər.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UpdatingPassword" xml:space="preserve">
|
<data name="UpdatingPassword" xml:space="preserve">
|
||||||
<value>Parol yenilənir</value>
|
<value>Parol yenilənir</value>
|
||||||
@@ -2137,19 +2137,19 @@ Skan prosesi avtomatik baş tutacaq.</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>
|
<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>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
|
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
|
||||||
<value>Təşkilatınızın siyasətləri, icazə verilən maksimum seyf bitmə vaxtını {0} saat {1} dəqiqə olaraq ayarladı.</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, seyfinizin bitmə vaxtına təsir edir. İcazə verilən maksimum seyf bitmə vaxtı {0} saat {1} dəqiqədir. Seyf vaxt bitmə əməliyyatı {2} olaraq ayarlandı.</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, seyfinizin vaxt bitmə əməliyyatını {0} olaraq ayarladı.</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>Seyfin bitmə vaxtı, təşkilatınız tərəfindən ayarlanan 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 seyfinizi xaricə köçürməyinizi əngəlləyir.</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>
|
||||||
@@ -2257,16 +2257,16 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Parol görünmür, göstərmək üçün toxunun.</value>
|
<value>Parol görünmür, göstərmək üçün toxunun.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FilterByVault" xml:space="preserve">
|
<data name="FilterByVault" xml:space="preserve">
|
||||||
<value>Elementləri seyfə görə filtrlə</value>
|
<value>Elementləri anbara görə filtrlə</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AllVaults" xml:space="preserve">
|
<data name="AllVaults" xml:space="preserve">
|
||||||
<value>Bütün seyflər</value>
|
<value>Bütün anbarlar</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Vaults" xml:space="preserve">
|
<data name="Vaults" xml:space="preserve">
|
||||||
<value>Seyflər</value>
|
<value>Anbarlar</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultFilterDescription" xml:space="preserve">
|
<data name="VaultFilterDescription" xml:space="preserve">
|
||||||
<value>Seyf: {0}</value>
|
<value>Anbar: {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="All" xml:space="preserve">
|
<data name="All" xml:space="preserve">
|
||||||
<value>Hamısı</value>
|
<value>Hamısı</value>
|
||||||
@@ -2305,7 +2305,7 @@ 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 ayarlamaq, seyfinizi 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. Lütfən 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>
|
||||||
@@ -2473,7 +2473,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Əlçatımlılıq Xidməti açıqlaması</value>
|
<value>Əlçatımlılıq Xidməti açıqlaması</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDisclosureText" xml:space="preserve">
|
<data name="AccessibilityDisclosureText" xml:space="preserve">
|
||||||
<value>Bitwarden, tətbiqlərdə və veb saytlarda giriş xanalarını axtarmaq üçün Əlçatımlılıq Xidmətini istifadə edir, daha sonra tətbiq və ya sayt üçün uyuşma tapdıqda istifadəçi adı və parolun daxil edilməsi üçün müvafiq xana kimliklərini yaradır. Xidmət tərəfindən bizə təqdim edilən məlumatların heç birini saxlamırıq, kimlik məlumatlarının daxil edilməsindən kənar ekrandakı hər hansısa elementə nəzarət etməyə cəhd etmirik.</value>
|
<value>Bitwarden, tətbiqlərdə və veb saytlarda giriş xanalarını axtarmaq üçün Əlçatımlılıq Xidmətini istifadə edir, daha sonra tətbiq və ya sayt üçün uyuşma tapdıqda istifadəçi adı və parolun daxil edilməsi üçün müvafiq sahə kimliklərini yaradır. Xidmət tərəfindən bizə təqdim edilən məlumatların heç birini saxlamırıq, kimlik məlumatlarının daxil edilməsindən kənar ekrandakı hər hansısa elementə nəzarət etməyə cəhd etmirik.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Accept" xml:space="preserve">
|
<data name="Accept" xml:space="preserve">
|
||||||
<value>Qəbul et</value>
|
<value>Qəbul et</value>
|
||||||
@@ -2514,7 +2514,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>Lütfən seyfinizin kilidinin açıq olduğuna və Barmaq izi ifadəsinin digər cihazla uyuşduğuna əmin olun.</value>
|
<value>Lütfən anbarınızın kilidinin açıq olduğuna və Barmaq izi ifadəsinin digər cihazla uyuşduğuna ə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>
|
||||||
@@ -2529,7 +2529,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<value>Bu tələb artıq yararsızdır</value>
|
<value>Bu tələb artıq yararsızdır</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PendingLogInRequests" xml:space="preserve">
|
<data name="PendingLogInRequests" xml:space="preserve">
|
||||||
<value>Gözlənilən giriş tələbləri</value>
|
<value>Giriş tələbləri gözlənilir</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DeclineAllRequests" xml:space="preserve">
|
<data name="DeclineAllRequests" xml:space="preserve">
|
||||||
<value>Bütün tələbləri rədd et</value>
|
<value>Bütün tələbləri rədd et</value>
|
||||||
@@ -2601,7 +2601,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<value>Açarı, mövcud və ya yeni bir elementə əlavə edin</value>
|
<value>Açarı, mövcud və ya yeni bir elementə əlavə edin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
|
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
|
||||||
<value>Seyfinizdə "{0}" ilə uyuşan heç bir element yoxdur</value>
|
<value>Anbarınızda {0} ilə uyuşan heç bir element yoxdur</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
|
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
|
||||||
<value>Bir element axtarın və ya yenisini əlavə edin</value>
|
<value>Bir element axtarın və ya yenisini əlavə edin</value>
|
||||||
@@ -2625,7 +2625,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<value>Bölgə</value>
|
<value>Bölgə</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Ana parolunuz təşkilatınızdakı siyasətlərdən birinə və ya bir neçəsinə uyğun gəlmir. Seyfə müraciət üçün ana parolunuzu indi güncəlləməlisiniz. Davam etsəniz, hazırkı seansdan çıxış etmiş və təkrar giriş etməli olacaqsınız. Digər cihazlardakı aktiv seanslar bir saata qədər aktiv qalmağa davam edə bilər.</value>
|
<value>Ana parolunuz təşkilatınızdakı siyasətlərdən birinə və ya bir neçəsinə uyğun gəlmir. Anbara müraciət üçün ana parolunuzu indi güncəlləməlisiniz. Davam etsəniz, hazırkı seansdan çıxış etmiş və təkrar giriş etməli olacaqsınız. Digər cihazlardakı aktiv seanslar bir saata qədər aktiv qalmağa davam edə bilər.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Hazırkı ana parol</value>
|
<value>Hazırkı ana parol</value>
|
||||||
@@ -2700,7 +2700,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<value>{0} olaraq giriş edilir</value>
|
<value>{0} olaraq giriş edilir</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
||||||
<value>Seyfin vaxt bitmə əməliyyatı "çıxış et" olaraq dəyişdirildi</value>
|
<value>Anbar vaxt bitməsi əməliyyatı "çıxış et" olaraq dəyişdirildi</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BlockAutoFill" xml:space="preserve">
|
<data name="BlockAutoFill" xml:space="preserve">
|
||||||
<value>Avto-doldurmanı əngəllə</value>
|
<value>Avto-doldurmanı əngəllə</value>
|
||||||
@@ -2758,7 +2758,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<value>Giriş edilir</value>
|
<value>Giriş edilir</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Vault" xml:space="preserve">
|
<data name="Vault" xml:space="preserve">
|
||||||
<value>Seyf</value>
|
<value>Anbar</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Appearance" xml:space="preserve">
|
<data name="Appearance" xml:space="preserve">
|
||||||
<value>Görünüş</value>
|
<value>Görünüş</value>
|
||||||
@@ -2807,13 +2807,13 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<value>{0} saat</value>
|
<value>{0} saat</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
||||||
<value>Yeni keçid açarlarını saxlamaq və seyfinizdəki keçid açarları ilə giriş etmək üçün Bitwarden-i istifadə edin.</value>
|
<value>Yeni keçid açarlarını saxlamaq və anbarınızda saxlanılan keçid açarları ilə giriş etmək üçün Bitwarden-i istifadə edin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||||
<value>Android Avto-doldurma Çərçivəsi, cihazınızdakı digər tətbiqlərə giriş məlumatlarının doldurulmasına kömək etmək üçün istifadə olunur.</value>
|
<value>Android Avto-doldurma Çərçivəsi, giriş məlumatlarını cihazınızdakı digər tətbiqlərə doldurmağa kömək etmək üçün istifadə olunur.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseInlineAutofillExplanationLong" xml:space="preserve">
|
<data name="UseInlineAutofillExplanationLong" xml:space="preserve">
|
||||||
<value>Seçdiyiniz klaviatura dəstəkləyirsə sətirdaxili avto-doldurmanı istifadə edin. Əks halda, ilkin örtük istifadə edin.</value>
|
<value>Seçdiyiniz klaviatura dəstəkləyirsə sətir daxili avto-doldurmanı istifadə edin. Əks halda, ilkin örtük istifadə edin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AdditionalOptions" xml:space="preserve">
|
<data name="AdditionalOptions" xml:space="preserve">
|
||||||
<value>Əlavə seçimlər</value>
|
<value>Əlavə seçimlər</value>
|
||||||
@@ -2847,7 +2847,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<value>Ana parolunuzu Bitwarden veb tətbiqində dəyişdirə bilərsiniz.</value>
|
<value>Ana parolunuzu Bitwarden veb tətbiqində dəyişdirə bilərsiniz.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YouCanImportDataToYourVaultOnX" xml:space="preserve">
|
<data name="YouCanImportDataToYourVaultOnX" xml:space="preserve">
|
||||||
<value>Datanı {0} üzərindən seyfinizə köçürə bilərsiniz.</value>
|
<value>Datanı {0} üzərindən anbarınıza köçürə bilərsiniz.</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">
|
||||||
@@ -2863,7 +2863,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<value>Veb tətbiqində Bitwarden hesabınızın daha çox özəlliyini kəşf edin.</value>
|
<value>Veb tətbiqində Bitwarden hesabınızın daha çox özəlliyini kəşf edin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
||||||
<value>Bitwarden, bir təşkilatı istifadə edərək seyf elementlərinizi başqaları ilə paylaşmağınıza imkan verir. Daha ətraflı məlumat üçün bitwarden.com saytını ziyarət edin.</value>
|
<value>Bitwarden, bir təşkilat hesabı istifadə edərək anbar elementlərinizi başqaları ilə paylaşmağınıza icazə verər. bitwarden.com veb saytında ətraflı öyrənin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RateAppDescriptionLong" xml:space="preserve">
|
<data name="RateAppDescriptionLong" xml:space="preserve">
|
||||||
<value>Başqalarının Bitwarden-in onlar üçün uyğun olub-olmadığını öyrənməkdə kömək edin. Tətbiq mağazasını ziyarət edin və tətbiqimizi qiymətləndirin.</value>
|
<value>Başqalarının Bitwarden-in onlar üçün uyğun olub-olmadığını öyrənməkdə kömək edin. Tətbiq mağazasını ziyarət edin və tətbiqimizi qiymətləndirin.</value>
|
||||||
@@ -2888,7 +2888,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<value>Təşkilatınız bir ana parol ayarlamağı tələb edir.</value>
|
<value>Təşkilatınız bir ana parol ayarlamağı tələb edir.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
||||||
<value>Seyf vaxt bitmə əməliyyatınızı dəyişdirmək üçün bir kilid açma seçimi qurun.</value>
|
<value>Anbar vaxt bitməsi əməliyyatınızı dəyişdirmək üçün bir kilid açma seçimi qurun.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||||
<value>Bu keçid açarını saxlayacaq bir giriş seçin</value>
|
<value>Bu keçid açarını saxlayacaq bir giriş seçin</value>
|
||||||
@@ -2968,10 +2968,22 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<value>3. Parollar və keçid açarları üçün istifadə etmək məqsədilə "Bitwarden"i seçin</value>
|
<value>3. Parollar və keçid açarları üçün istifadə etmək məqsədilə "Bitwarden"i seçin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
||||||
<value>Keçid açarınız Bitwarden seyfinizdə saxlanılacaq</value>
|
<value>Keçid açarınız Bitwarden anbarınızda saxlanılacaq</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Keçid açarınız {0} üçün Bitwarden seyfinizdə saxlanılacaq</value>
|
<value>Keçid açarınız {0} üçün Bitwarden anbarınızda saxlanılacaq</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Təyin edilməmiş təşkilat elementləri artıq Bütün Anbarlar görünüşündə görünməyəndir və yalnız Admin Konsolu vasitəsilə əlçatandır. Bu elementləri görünən etmək üçün Admin Konsolundan bir kolleksiyaya təyin edin.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>16 May 2024-cü ildən etibarən təyin edilməmiş təşkilat elementləri artıq Bütün Anbarlar görünüşündə görünməyən və yalnız Admin Konsolu vasitəsilə əlçatan olacaq. Bu elementləri görünən etmək üçün Admin Konsolundan bir kolleksiyaya təyin edin.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Daha sonra xatırlat</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Xəbərdarlıq</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Keçid açarları bu tətbiq üçün dəstəklənmir</value>
|
<value>Keçid açarları bu tətbiq üçün dəstəklənmir</value>
|
||||||
|
|||||||
@@ -2650,10 +2650,10 @@
|
|||||||
<value>Запомніць гэту прыладу</value>
|
<value>Запомніць гэту прыладу</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Passkey" xml:space="preserve">
|
<data name="Passkey" xml:space="preserve">
|
||||||
<value>Ключ доступу</value>
|
<value>Passkey</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Passkeys" xml:space="preserve">
|
<data name="Passkeys" xml:space="preserve">
|
||||||
<value>Ключы доступу</value>
|
<value>Passkeys</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Application" xml:space="preserve">
|
<data name="Application" xml:space="preserve">
|
||||||
<value>Праграма</value>
|
<value>Праграма</value>
|
||||||
@@ -2974,6 +2974,18 @@
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys not supported for this app</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -1101,7 +1101,7 @@
|
|||||||
<value>Г-ца</value>
|
<value>Г-ца</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Mx" xml:space="preserve">
|
<data name="Mx" xml:space="preserve">
|
||||||
<value>Предпочитам да не посочвам</value>
|
<value>Mx</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="November" xml:space="preserve">
|
<data name="November" xml:space="preserve">
|
||||||
<value>ноември</value>
|
<value>ноември</value>
|
||||||
@@ -2584,16 +2584,16 @@
|
|||||||
<value>Проверяване в известните случаи на изтекли данни за тази парола</value>
|
<value>Проверяване в известните случаи на изтекли данни за тази парола</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExposedMasterPassword" xml:space="preserve">
|
<data name="ExposedMasterPassword" xml:space="preserve">
|
||||||
<value>Разобличена главна парола</value>
|
<value>Exposed Master Password</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordFoundInADataBreachAlertDescription" xml:space="preserve">
|
<data name="PasswordFoundInADataBreachAlertDescription" xml:space="preserve">
|
||||||
<value>Паролата е намерена в пробив на данни. Използвайте уникална парола, за да защитите Вашия акаунт. Наистина ли искате да използвате слаба парола?</value>
|
<value>Password found in a data breach. Use a unique password to protect your account. Are you sure you want to use an exposed password?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WeakAndExposedMasterPassword" xml:space="preserve">
|
<data name="WeakAndExposedMasterPassword" xml:space="preserve">
|
||||||
<value>Слаба и разобличена главна парола</value>
|
<value>Weak and Exposed Master Password</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
|
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
|
||||||
<value>Разпозната е слаба парола, която присъства в известен случай на изтекли данни. Използвайте сложна и уникална парола, за да защитите Вашия акаунт. Наистина ли искате да използвате тази парола?</value>
|
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
|
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
|
||||||
<value>Идентификаторът за еднократн идентификация на организация е задължителен.</value>
|
<value>Идентификаторът за еднократн идентификация на организация е задължителен.</value>
|
||||||
@@ -2974,11 +2974,23 @@
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Секретният ключ ще бъде запазен в трезора на Битуорден за {0}</value>
|
<value>Секретният ключ ще бъде запазен в трезора на Битуорден за {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Неразпределените елементи на организацията вече не се виждат в изгледа с „Всички трезори“, а са достъпни само през Административната конзола. Добавете тези елементи към някоя колекция в Административната конзола, за да станат видими.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>От 16 май 2024г. неразпределените елементи на организациите вече няма се виждат в изгледа с „Всички трезори“, а ще бъдат достъпни само през Административната конзола. Добавете тези елементи към някоя колекция в Административната конзола, за да станат видими.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Напомнете ми по-късно</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Известие</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>За това приложение не се поддържат секретни ключове</value>
|
<value>За това приложение не се поддържат секретни ключове</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
||||||
<value>Операцията със секретния ключ беше неуспешна, тъй като потребителят не може да бъде потвърден.</value>
|
<value>Passkey operation failed because browser is not privileged</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
||||||
<value>Операцията със секретния ключ беше неуспешна, тъй като подписът в браузъра не съвпада</value>
|
<value>Операцията със секретния ключ беше неуспешна, тъй като подписът в браузъра не съвпада</value>
|
||||||
|
|||||||
@@ -2769,7 +2769,7 @@ Do you want to switch to this account?</value>
|
|||||||
<value>Account security</value>
|
<value>Account security</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||||
<value>Bitwarden help center</value>
|
<value>Bitwarden Help Center</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||||
<value>Contact Bitwarden support</value>
|
<value>Contact Bitwarden support</value>
|
||||||
@@ -2975,6 +2975,18 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys not supported for this app</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -190,7 +190,7 @@
|
|||||||
<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>Pošaljite nam E-Mail</value>
|
<value>Pošaljite nam E-Mail </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EmailUsDescription" xml:space="preserve">
|
<data name="EmailUsDescription" xml:space="preserve">
|
||||||
<value>Pošaljite nam E-Mail direktno da biste dobili pomoć ili ostavili povratne informacije.</value>
|
<value>Pošaljite nam E-Mail direktno da biste dobili pomoć ili ostavili povratne informacije.</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>Podnesite izvještaj o greški</value>
|
<value>Podnesite izvještaj o greški </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FileBugReportDescription" xml:space="preserve">
|
<data name="FileBugReportDescription" xml:space="preserve">
|
||||||
<value>Prijavi problem u našem GitHub repozitoriju.</value>
|
<value>Prijavi problem u našem GitHub repozitoriju.</value>
|
||||||
@@ -394,7 +394,7 @@
|
|||||||
<value>Prikaz</value>
|
<value>Prikaz</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VisitOurWebsite" xml:space="preserve">
|
<data name="VisitOurWebsite" xml:space="preserve">
|
||||||
<value>Posjetite našu Web Stranicu</value>
|
<value>Posjetite našu Web Stranicu </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Website" xml:space="preserve">
|
<data name="Website" xml:space="preserve">
|
||||||
<value>Web stranica</value>
|
<value>Web stranica</value>
|
||||||
@@ -502,7 +502,7 @@
|
|||||||
<value>Dodirnite Bitwarden ikonu u meniju da biste pokrenuli dodatak.</value>
|
<value>Dodirnite Bitwarden ikonu u meniju da biste pokrenuli dodatak.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionTurnOn" xml:space="preserve">
|
<data name="ExtensionTurnOn" xml:space="preserve">
|
||||||
<value>Da biste uključili Bitwarden u Safari-ju i drugim aplikacijama, dodirnite ikonu „više“ u donjem redu menija.</value>
|
<value> Da biste uključili Bitwarden u Safari-ju i drugim aplikacijama, dodirnite ikonu „više“ u donjem redu menija.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Favorite" xml:space="preserve">
|
<data name="Favorite" xml:space="preserve">
|
||||||
<value>Omiljene</value>
|
<value>Omiljene</value>
|
||||||
@@ -1301,13 +1301,13 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<value>Preporučeno je onemogućiti bilo koje druge aplikacije za automatsko popunjavanje lozinki u Postavkama uređaja ukoliko ih ne planirate koristiti.</value>
|
<value>Preporučeno je onemogućiti bilo koje druge aplikacije za automatsko popunjavanje lozinki u Postavkama uređaja ukoliko ih ne planirate koristiti.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillDescription" xml:space="preserve">
|
<data name="BitwardenAutofillDescription" xml:space="preserve">
|
||||||
<value>Pristupite vašem trezoru direktno putem vaše tastature da brže unesete vaše lozinke.</value>
|
<value>Pristupite vašem trezoru direktno putem vaše tastature da brže unesete vaše lozinke. </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTurnOn" xml:space="preserve">
|
<data name="AutofillTurnOn" xml:space="preserve">
|
||||||
<value>Da bi omogućili automatsko popunjavanje lozinki na vašem uređaju, molimo vas da pratite sljedeće upute:</value>
|
<value>Da bi omogućili automatsko popunjavanje lozinki na vašem uređaju, molimo vas da pratite sljedeće upute:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTurnOn1" xml:space="preserve">
|
<data name="AutofillTurnOn1" xml:space="preserve">
|
||||||
<value>1. Otvorite Postavke na Vašem uređaju</value>
|
<value>1. Otvorite Postavke na Vašem uređaju </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTurnOn2" xml:space="preserve">
|
<data name="AutofillTurnOn2" xml:space="preserve">
|
||||||
<value>2. Otvorite "Lozinke"</value>
|
<value>2. Otvorite "Lozinke"</value>
|
||||||
@@ -1316,7 +1316,7 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<value>3. Pritisnite "Auto ispuna lozinki"</value>
|
<value>3. Pritisnite "Auto ispuna lozinki"</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTurnOn4" xml:space="preserve">
|
<data name="AutofillTurnOn4" xml:space="preserve">
|
||||||
<value>4. Uključite automatsko ispunjavanje</value>
|
<value>4. Uključite automatsko ispunjavanje </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTurnOn5" xml:space="preserve">
|
<data name="AutofillTurnOn5" xml:space="preserve">
|
||||||
<value>5. Odaberite Bitwarden</value>
|
<value>5. Odaberite Bitwarden</value>
|
||||||
@@ -1340,7 +1340,7 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<value>Prijave</value>
|
<value>Prijave</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SecureNotes" xml:space="preserve">
|
<data name="SecureNotes" xml:space="preserve">
|
||||||
<value>Sigurna zabilješke</value>
|
<value>Sigurna zabilješke </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AllItems" xml:space="preserve">
|
<data name="AllItems" xml:space="preserve">
|
||||||
<value>Sve spremljene lozinke</value>
|
<value>Sve spremljene lozinke</value>
|
||||||
@@ -1446,14 +1446,14 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<value>Šifra</value>
|
<value>Šifra</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WordSeparator" xml:space="preserve">
|
<data name="WordSeparator" xml:space="preserve">
|
||||||
<value>Odvajač riječi</value>
|
<value>Odvajač riječi </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Clear" xml:space="preserve">
|
<data name="Clear" xml:space="preserve">
|
||||||
<value>Obriši</value>
|
<value>Obriši</value>
|
||||||
<comment>To clear something out. example: To clear browser history.</comment>
|
<comment>To clear something out. example: To clear browser history.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Generator" xml:space="preserve">
|
<data name="Generator" xml:space="preserve">
|
||||||
<value>Generator</value>
|
<value>Generator </value>
|
||||||
<comment>Short for "Password Generator"</comment>
|
<comment>Short for "Password Generator"</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoFoldersToList" xml:space="preserve">
|
<data name="NoFoldersToList" xml:space="preserve">
|
||||||
@@ -1477,7 +1477,7 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<value>Zaključaj odmah</value>
|
<value>Zaključaj odmah</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PIN" xml:space="preserve">
|
<data name="PIN" xml:space="preserve">
|
||||||
<value>PIN</value>
|
<value>PIN </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Unlock" xml:space="preserve">
|
<data name="Unlock" xml:space="preserve">
|
||||||
<value>Otključaj</value>
|
<value>Otključaj</value>
|
||||||
@@ -1528,7 +1528,7 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<value>2 minute</value>
|
<value>2 minute</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ClearClipboard" xml:space="preserve">
|
<data name="ClearClipboard" xml:space="preserve">
|
||||||
<value>Očisti međumemoriju</value>
|
<value>Očisti međumemoriju </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="ClearClipboardDescription" xml:space="preserve">
|
<data name="ClearClipboardDescription" xml:space="preserve">
|
||||||
@@ -1684,7 +1684,7 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<value>Trezor uspješno izvezen</value>
|
<value>Trezor uspješno izvezen</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Clone" xml:space="preserve">
|
<data name="Clone" xml:space="preserve">
|
||||||
<value>Kopiraj identično</value>
|
<value>Kopiraj identično </value>
|
||||||
<comment>Clone an entity (verb).</comment>
|
<comment>Clone an entity (verb).</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordGeneratorPolicyInEffect" xml:space="preserve">
|
<data name="PasswordGeneratorPolicyInEffect" xml:space="preserve">
|
||||||
@@ -1727,7 +1727,7 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<comment>Confirmation message after successfully restoring a soft-deleted item</comment>
|
<comment>Confirmation message after successfully restoring a soft-deleted item</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Trash" xml:space="preserve">
|
<data name="Trash" xml:space="preserve">
|
||||||
<value>Smeće</value>
|
<value>Smeće </value>
|
||||||
<comment>(noun) Location of deleted items which have not yet been permanently deleted</comment>
|
<comment>(noun) Location of deleted items which have not yet been permanently deleted</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchTrash" xml:space="preserve">
|
<data name="SearchTrash" xml:space="preserve">
|
||||||
@@ -1837,7 +1837,7 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<value>Koristi pristupačnost</value>
|
<value>Koristi pristupačnost</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDescription" xml:space="preserve">
|
<data name="AccessibilityDescription" xml:space="preserve">
|
||||||
<value>Koristi uslugu Bitwarden pristupačnosti za auto-ispunu tvojih prijava u aplikacijama i na webu. Kada je uključeno, prilikom odabira polja za prijavu, prikazati će se iskočni okvir.</value>
|
<value>Koristi uslugu Bitwarden pristupačnosti za auto-ispunu tvojih prijava u aplikacijama i na webu. Kada je uključeno, prilikom odabira polja za prijavu, prikazati će se iskočni okvir. </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDescription2" xml:space="preserve">
|
<data name="AccessibilityDescription2" xml:space="preserve">
|
||||||
<value>Koristi uslugu Bitwarden pristupačnosti za auto-ispunu tvojih prijava u aplikacijama i na webu (Zahtijeva uključenu opciju „Koristi preklapanje”).</value>
|
<value>Koristi uslugu Bitwarden pristupačnosti za auto-ispunu tvojih prijava u aplikacijama i na webu (Zahtijeva uključenu opciju „Koristi preklapanje”).</value>
|
||||||
@@ -1924,7 +1924,7 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="PendingDelete" xml:space="preserve">
|
<data name="PendingDelete" xml:space="preserve">
|
||||||
<value>Brisanje na čekanju</value>
|
<value>Brisanje na čekanju </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExpirationDate" xml:space="preserve">
|
<data name="ExpirationDate" xml:space="preserve">
|
||||||
<value>Rok upotrebe</value>
|
<value>Rok upotrebe</value>
|
||||||
@@ -1966,7 +1966,7 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<value>Sigurno želiš ukloniti lozinku?</value>
|
<value>Sigurno želiš ukloniti lozinku?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RemovingSendPassword" xml:space="preserve">
|
<data name="RemovingSendPassword" xml:space="preserve">
|
||||||
<value>Uklanjanje lozinke</value>
|
<value>Uklanjanje lozinke </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SendPasswordRemoved" xml:space="preserve">
|
<data name="SendPasswordRemoved" xml:space="preserve">
|
||||||
<value>Lozinka je uklonjena.</value>
|
<value>Lozinka je uklonjena.</value>
|
||||||
@@ -2149,13 +2149,13 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<value>Vrijeme isteka premašuje ograničenje koju je postavila tvoja organizacija.</value>
|
<value>Vrijeme isteka premašuje ograničenje koju je postavila tvoja organizacija.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
|
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
|
||||||
<value>Jedno ili više pravila organizacija onemogućuje izvoz osobnog trezora.</value>
|
<value>Jedno ili više pravila organizacija onemogućuje izvoz osobnog trezora. </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AddAccount" xml:space="preserve">
|
<data name="AddAccount" xml:space="preserve">
|
||||||
<value>Dodaj račun</value>
|
<value>Dodaj račun</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountUnlocked" xml:space="preserve">
|
<data name="AccountUnlocked" xml:space="preserve">
|
||||||
<value>Otključano</value>
|
<value>Otključano </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountLocked" xml:space="preserve">
|
<data name="AccountLocked" xml:space="preserve">
|
||||||
<value>Zaključano</value>
|
<value>Zaključano</value>
|
||||||
@@ -2164,13 +2164,13 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<value>Odjavljeno</value>
|
<value>Odjavljeno</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountSwitchedAutomatically" xml:space="preserve">
|
<data name="AccountSwitchedAutomatically" xml:space="preserve">
|
||||||
<value>Prebačeni ste na sljedeći dostupan račun</value>
|
<value>Prebačeni ste na sljedeći dostupan račun </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountLockedSuccessfully" xml:space="preserve">
|
<data name="AccountLockedSuccessfully" xml:space="preserve">
|
||||||
<value>Račun zaključan</value>
|
<value>Račun zaključan </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountLoggedOutSuccessfully" xml:space="preserve">
|
<data name="AccountLoggedOutSuccessfully" xml:space="preserve">
|
||||||
<value>Uspješno odjavljeni sa računa</value>
|
<value>Uspješno odjavljeni sa računa </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountRemovedSuccessfully" xml:space="preserve">
|
<data name="AccountRemovedSuccessfully" xml:space="preserve">
|
||||||
<value>Račun je uspješno uklonjen</value>
|
<value>Račun je uspješno uklonjen</value>
|
||||||
@@ -2206,7 +2206,7 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<value>Kopiraj link od Send-a prilikom spremanja</value>
|
<value>Kopiraj link od Send-a prilikom spremanja</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SendingCode" xml:space="preserve">
|
<data name="SendingCode" xml:space="preserve">
|
||||||
<value>Kod se šalje</value>
|
<value>Kod se šalje </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Verifying" xml:space="preserve">
|
<data name="Verifying" xml:space="preserve">
|
||||||
<value>Provjera u toku</value>
|
<value>Provjera u toku</value>
|
||||||
@@ -2767,7 +2767,7 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<value>Account security</value>
|
<value>Account security</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||||
<value>Bitwarden help center</value>
|
<value>Bitwarden Help Center</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||||
<value>Contact Bitwarden support</value>
|
<value>Contact Bitwarden support</value>
|
||||||
@@ -2973,6 +2973,18 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys not supported for this app</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -2974,6 +2974,18 @@ Voleu canviar a aquest compte?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>La clau d'accés es guardarà a la caixa forta de Bitwarden per a {0}</value>
|
<value>La clau d'accés es guardarà a la caixa forta de Bitwarden per a {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Els elements de l'organització no assignats ja no són visibles a la visualització Totes les caixes fortes i només s'hi poden accedir des de la Consola d'administració. Assigna aquests elements a una col·lecció des de la Consola d'administració per fer-los visibles.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>El 16 de maig de 2024, els elements de l'organització no assignats deixaran de ser visibles a la visualització Totes les caixes fortes i només es podran accedir des de la Consola d'administració. Assigna aquests elements a una col·lecció des de la Consola d'administració per fer-los visibles.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Recorda-m'ho més tard</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Avís</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Les claus de pas no són compatibles amb aquesta aplicació</value>
|
<value>Les claus de pas no són compatibles amb aquesta aplicació</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -901,7 +901,7 @@ Načtení proběhne automaticky.</value>
|
|||||||
<value>Načíst QR kód</value>
|
<value>Načíst QR kód</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Camera" xml:space="preserve">
|
<data name="Camera" xml:space="preserve">
|
||||||
<value>Kamera</value>
|
<value>Fotoaparát</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Photos" xml:space="preserve">
|
<data name="Photos" xml:space="preserve">
|
||||||
<value>Fotky</value>
|
<value>Fotky</value>
|
||||||
@@ -2544,7 +2544,7 @@ Chcete se přepnout na tento účet?</value>
|
|||||||
<value>Žádné čekající žádosti</value>
|
<value>Žádné čekající žádosti</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
|
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
|
||||||
<value>Pro použití skeneru musíte povolit přístup ke kameře</value>
|
<value>Pro použití skeneru musíte povolit přístup k fotoaparátu</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Language" xml:space="preserve">
|
<data name="Language" xml:space="preserve">
|
||||||
<value>Jazyk</value>
|
<value>Jazyk</value>
|
||||||
@@ -2767,7 +2767,7 @@ Chcete se přepnout na tento účet?</value>
|
|||||||
<value>Zabezpečení účtu</value>
|
<value>Zabezpečení účtu</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||||
<value>Centrum nápovědy Bitwardenu</value>
|
<value>Centrum nápovědy Bitwarden</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||||
<value>Kontakt na podporu Bitwarden</value>
|
<value>Kontakt na podporu Bitwarden</value>
|
||||||
@@ -2973,6 +2973,18 @@ Chcete se přepnout na tento účet?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Váš přístupový klíč bude pro {0} uložen do Vašeho trezoru na Bitwardenu</value>
|
<value>Váš přístupový klíč bude pro {0} uložen do Vašeho trezoru na Bitwardenu</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Nepřiřazené položky organizace již nejsou viditelné ve Vašem zobrazení všech trezorů a jsou nyní přístupné jen v konzoli správce. Přiřaďte tyto položky do kolekce z konzole pro správce, aby byly viditelné.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>Dne 16. května 2024 již nebudou nepřiřazené položky organizace viditelné v zobrazení Všechny trezory a budou přístupné jen prostřednictvím konzoly správce. Přiřaďte tyto položky do kolekce z konzoly pro správce, aby byly viditelné.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Připomenout později</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Upozornění</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Přístupové klíče nejsou pro tuto aplikaci podporovány</value>
|
<value>Přístupové klíče nejsou pro tuto aplikaci podporovány</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -385,7 +385,7 @@
|
|||||||
<value>Gwirio'r prif gyfrinair</value>
|
<value>Gwirio'r prif gyfrinair</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyPIN" xml:space="preserve">
|
<data name="VerifyPIN" xml:space="preserve">
|
||||||
<value>Gwirio'r PIN</value>
|
<value>Verify PIN</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Version" xml:space="preserve">
|
<data name="Version" xml:space="preserve">
|
||||||
<value>Fersiwn</value>
|
<value>Fersiwn</value>
|
||||||
@@ -446,7 +446,7 @@
|
|||||||
<value>Newid ebost</value>
|
<value>Newid ebost</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeEmailConfirmation" xml:space="preserve">
|
<data name="ChangeEmailConfirmation" xml:space="preserve">
|
||||||
<value>Gallwch newid eich cyfeiriad ebost yng nghell we bitwarden.com. Hoffech chi fynd i'r wefan nawr?</value>
|
<value>You can change your email address on the bitwarden.com web vault. Do you want to visit the website now?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeMasterPassword" xml:space="preserve">
|
<data name="ChangeMasterPassword" xml:space="preserve">
|
||||||
<value>Newid y prif gyfrinair</value>
|
<value>Newid y prif gyfrinair</value>
|
||||||
@@ -610,7 +610,7 @@
|
|||||||
<value>Does dim eitemau yn eich cell.</value>
|
<value>Does dim eitemau yn eich cell.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoItemsTap" xml:space="preserve">
|
<data name="NoItemsTap" xml:space="preserve">
|
||||||
<value>Does dim eitemau yn eich cell ar gyfer y gwasanaeth hwn. Tapiwch i ychwanegu un.</value>
|
<value>There are no items in your vault for this website/app. Tap to add one.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
|
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
|
||||||
<value>Does dim enw defnyddiwr na chyfrinair i'r manylyn mewngofnodi hwn.</value>
|
<value>Does dim enw defnyddiwr na chyfrinair i'r manylyn mewngofnodi hwn.</value>
|
||||||
@@ -702,7 +702,7 @@
|
|||||||
<comment>What Apple calls their fingerprint reader.</comment>
|
<comment>What Apple calls their fingerprint reader.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="TwoStepLogin" xml:space="preserve">
|
<data name="TwoStepLogin" xml:space="preserve">
|
||||||
<value>Mewngofnodi dau gam</value>
|
<value>Mewngofnodi dau agm</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnlockWith" xml:space="preserve">
|
<data name="UnlockWith" xml:space="preserve">
|
||||||
<value>Datgloi â {0}</value>
|
<value>Datgloi â {0}</value>
|
||||||
@@ -1468,7 +1468,7 @@ Scanning will happen automatically.</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="LearnOrgConfirmation" xml:space="preserve">
|
<data name="LearnOrgConfirmation" xml:space="preserve">
|
||||||
<value>Mae Bitwarden yn caniatáu i chi rannu eitemau o'ch cell â phobl eraill drwy ddefnyddio cyfrif sefydliad. Hoffech chi fynd i wefan bitwarden.com i ddysgu mwy?</value>
|
<value>Bitwarden allows you to share your vault items with others by using an organization account. Would you like to visit the bitwarden.com website to learn more?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVault" xml:space="preserve">
|
<data name="ExportVault" xml:space="preserve">
|
||||||
<value>Allforio'r gell</value>
|
<value>Allforio'r gell</value>
|
||||||
@@ -2769,7 +2769,7 @@ Do you want to switch to this account?</value>
|
|||||||
<value>Diogelwch eich cyfrif</value>
|
<value>Diogelwch eich cyfrif</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||||
<value>Bitwarden help center</value>
|
<value>Bitwarden Help Center</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||||
<value>Contact Bitwarden support</value>
|
<value>Contact Bitwarden support</value>
|
||||||
@@ -2943,7 +2943,7 @@ Do you want to switch to this account?</value>
|
|||||||
<comment>The parameter is the RpId</comment>
|
<comment>The parameter is the RpId</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||||
<value>Yn giwrio eich hunaniaeth...</value>
|
<value>Verifying identity...</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Passwords" xml:space="preserve">
|
<data name="Passwords" xml:space="preserve">
|
||||||
<value>Passwords</value>
|
<value>Passwords</value>
|
||||||
@@ -2975,6 +2975,18 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys not supported for this app</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -2137,7 +2137,7 @@ Skanning vil ske automatisk.</value>
|
|||||||
<value>Denne organisation har en virksomhedspolitik, der automatisk tilmelder dig til nulstilling af adgangskode. Tilmelding giver organisationsadministratorer mulighed for at skifte din hovedadgangskode.</value>
|
<value>Denne organisation har en virksomhedspolitik, der automatisk tilmelder dig til nulstilling af adgangskode. Tilmelding giver organisationsadministratorer mulighed for at skifte din hovedadgangskode.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
|
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
|
||||||
<value>Organisationspolitikkerne har sat den maksimalt tilladte boks-timeout til {0} tim(er) og {1} minut(ter).</value>
|
<value>Organisationspolitikkerne har sat den maksimalt tilladte bokstimeout til {0} tim(er) og {1} minut(ter).</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
||||||
<value>Organisationspolitikkerne påvirker boks-timeout. Maks. tilladt boks-timeout er {0} time(r) og {1} minut(ter). Boks-timeout er pt. sat til {2}.</value>
|
<value>Organisationspolitikkerne påvirker boks-timeout. Maks. tilladt boks-timeout er {0} time(r) og {1} minut(ter). Boks-timeout er pt. sat til {2}.</value>
|
||||||
@@ -2146,7 +2146,7 @@ Skanning vil ske automatisk.</value>
|
|||||||
<value>Organisationspolitikker har sat boks-timeouthandlingen til {0}.</value>
|
<value>Organisationspolitikker har sat boks-timeouthandlingen til {0}.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutToLarge" xml:space="preserve">
|
<data name="VaultTimeoutToLarge" xml:space="preserve">
|
||||||
<value>Boks-timeout overskrider den af organisationen fastsatte restriktion.</value>
|
<value>Timeout for din boks overskrider de begrænsninger, der er angivet af din organisation.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
|
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
|
||||||
<value>En eller flere organisationspolitikker forhindrer eksport af din personlige boks.</value>
|
<value>En eller flere organisationspolitikker forhindrer eksport af din personlige boks.</value>
|
||||||
@@ -2889,7 +2889,7 @@ Vil du skifte til denne konto?</value>
|
|||||||
<value>Organisationen kræver, at der oprettes en hovedadgangskode.</value>
|
<value>Organisationen kræver, at der oprettes en hovedadgangskode.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
||||||
<value>Opsæt en oplåsningsmetode for at ændre Boks-timeouthandlingen.</value>
|
<value>Opsæt en oplåsningsmetode for at ændre Bokstimeouthandlingen.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||||
<value>Vælg et login at gemme denne adgangsnøgle til</value>
|
<value>Vælg et login at gemme denne adgangsnøgle til</value>
|
||||||
@@ -2974,6 +2974,18 @@ Vil du skifte til denne konto?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Adgangsnøglen gemmes i Bitwarden-boksen til {0}</value>
|
<value>Adgangsnøglen gemmes i Bitwarden-boksen til {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Utildelte organisationsemner er ikke længere synlige i Alle Bokse-visningen og er kun tilgængelige via Admin-konsollen. Føj disse emner til en samling fra Admin-konsollen for at gøre dem synlige.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>Pr. 16. maj 2024 vil utildelte organisationsemner ikke længere være synlige i Alle Bokse-visningen og vil kun være tilgængelige via Admin-konsollen. Tildel disse emner til en samling via Admin-konsollen for at gøre dem synlige.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Påmind senere</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Varsling</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Adgangsnøgler ikke understøttet til denne app</value>
|
<value>Adgangsnøgler ikke understøttet til denne app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -910,7 +910,7 @@ Das Scannen erfolgt automatisch.</value>
|
|||||||
<value>TOTP kopieren</value>
|
<value>TOTP kopieren</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyTotpAutomaticallyDescription" xml:space="preserve">
|
<data name="CopyTotpAutomaticallyDescription" xml:space="preserve">
|
||||||
<value>Ist ein Authentifizierungsschlüssel mit deinen Zugangsdaten verknüpft, wird der TOTP-Verifizierungscode in deine Zwischenablage kopiert, wenn du die Zugangsdaten automatisch ausfüllen lässt.</value>
|
<value>Ist ein Authentifizierungsschlüssel mit deinen Zugangsdaten verknüpft, wird der TOTP Verifizierungscode in die Zwischenablage kopiert, wenn du die Zugangsdaten automatisch einfügen lässt.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyTotpAutomatically" xml:space="preserve">
|
<data name="CopyTotpAutomatically" xml:space="preserve">
|
||||||
<value>TOTP automatisch kopieren</value>
|
<value>TOTP automatisch kopieren</value>
|
||||||
@@ -1195,7 +1195,7 @@ Das Scannen erfolgt automatisch.</value>
|
|||||||
<value>Windows Hello</value>
|
<value>Windows Hello</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
||||||
<value>Wir waren nicht in der Lage, das Android Credential Provider Menü für dich automatisch zu öffnen. Du kannst in den Android Einstellungen > System > Passwörter & Konten > Passwörter, Passkeys und Datendienste zum Credential Provider Einstellungs-Menü gelangen.</value>
|
<value>We were unable to automatically open the Android credential provider settings menu for you. You can navigate to the credential provider settings menu manually from Android Settings > System > Passwords & accounts > Passwords, passkeys and data services.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||||
<value>Die Android Auto-Fill Einstellungen konnten nicht automatisch geöffnet werden. Über Android Einstellungen > Sprachen & Eingabe > AutoFill-Dienst kannst du manuell zu den Auto-Fill Einstellungen navigieren.</value>
|
<value>Die Android Auto-Fill Einstellungen konnten nicht automatisch geöffnet werden. Über Android Einstellungen > Sprachen & Eingabe > AutoFill-Dienst kannst du manuell zu den Auto-Fill Einstellungen navigieren.</value>
|
||||||
@@ -1292,7 +1292,7 @@ Das Scannen erfolgt automatisch.</value>
|
|||||||
<value>Auto-Ausfüllen aktiviert!</value>
|
<value>Auto-Ausfüllen aktiviert!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MustLogInMainAppAutofill" xml:space="preserve">
|
<data name="MustLogInMainAppAutofill" xml:space="preserve">
|
||||||
<value>Du musst dich in der Bitwarden App anmelden, bevor du Auto-Ausfüllen nutzen kannst.</value>
|
<value>Du musst dich in der Bitwarden App anmelden, bevor du AutoFill nutzen kannst.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillSetup" xml:space="preserve">
|
<data name="AutofillSetup" xml:space="preserve">
|
||||||
<value>Du kannst nun direkt von der Tastatur auf deine Zugangsdaten zugreifen, wenn du dich auf Webseiten oder in Apps anmeldest.</value>
|
<value>Du kannst nun direkt von der Tastatur auf deine Zugangsdaten zugreifen, wenn du dich auf Webseiten oder in Apps anmeldest.</value>
|
||||||
@@ -2973,6 +2973,18 @@ Möchtest du zu diesem Konto wechseln?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Dein Passkey wird in deinem Bitwarden-Tresor für {0} gespeichert</value>
|
<value>Dein Passkey wird in deinem Bitwarden-Tresor für {0} gespeichert</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Hinweis: Nicht zugeordnete Organisationseinträge sind nicht mehr in der Ansicht aller Tresore sichtbar und nur über die Administrator-Konsole zugänglich. Weise diese Einträge einer Sammlung aus der Administrator-Konsole zu, um sie sichtbar zu machen.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>Ab dem 16. Mai 2024 werden nicht zugeordnete Organisationseinträge nicht mehr in der Ansicht aller Tresore sichtbar und nur über die Administrator-Konsole zugänglich sein. Weise diese Einträge einer Sammlung aus der Administrator-Konsole zu, um sie sichtbar zu machen.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Später erinnern</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Hinweis</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys werden für diese App nicht unterstützt</value>
|
<value>Passkeys werden für diese App nicht unterstützt</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -190,7 +190,7 @@
|
|||||||
<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>Επικοινωνία μέσω email</value>
|
<value>Στείλτε μας email</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EmailUsDescription" xml:space="preserve">
|
<data name="EmailUsDescription" xml:space="preserve">
|
||||||
<value>Στείλτε μας email για να λάβετε βοήθεια ή να αφήσετε σχόλια.</value>
|
<value>Στείλτε μας email για να λάβετε βοήθεια ή να αφήσετε σχόλια.</value>
|
||||||
@@ -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>Το vault μου</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">
|
||||||
@@ -422,7 +422,7 @@
|
|||||||
<value>Υπηρεσία αυτόματης συμπλήρωσης</value>
|
<value>Υπηρεσία αυτόματης συμπλήρωσης</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
||||||
<value>Ορίστε το Bitwarden ως πάροχο κλειδιού πρόσβασης στις ρυθμίσεις της συσκευής.</value>
|
<value>Set Bitwarden as your passkey provider in device settings.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||||
<value>Αποφυγή αμφιλεγόμενων χαρακτήρων</value>
|
<value>Αποφυγή αμφιλεγόμενων χαρακτήρων</value>
|
||||||
@@ -431,7 +431,7 @@
|
|||||||
<value>Επέκταση εφαρμογής Bitwarden</value>
|
<value>Επέκταση εφαρμογής Bitwarden</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
||||||
<value>Ο ευκολότερος τρόπος για να προσθέστε νέες συνδέσεις στη κρύπτη σας, είναι μέσω της επέκτασης εφαρμογής Bitwarden. Μάθετε περισσότερα σχετικά με τη χρήση της επέκτασης εφαρμογής Bitwarden, μεταβαίνοντας στις "Ρυθμίσεις".</value>
|
<value>Ο ευκολότερος τρόπος για να προσθέστε νέες συνδέσεις στο vault σας, είναι μέσω της επέκτασης εφαρμογής Bitwarden. Μάθετε περισσότερα σχετικά με τη χρήση της επέκτασης εφαρμογής Bitwarden, μεταβαίνοντας στις "Ρυθμίσεις".</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
|
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
|
||||||
<value>Χρήση του Bitwarden στο Safari και σε άλλες εφαρμογές για αυτόματη συμπλήρωση των συνδέσεων σας.</value>
|
<value>Χρήση του Bitwarden στο Safari και σε άλλες εφαρμογές για αυτόματη συμπλήρωση των συνδέσεων σας.</value>
|
||||||
@@ -443,7 +443,7 @@
|
|||||||
<value>Χρησιμοποιείστε την υπηρεσία προσβασιμότητας Bitwarden, για την αυτόματη συμπλήρωση συνδέσεων.</value>
|
<value>Χρησιμοποιείστε την υπηρεσία προσβασιμότητας Bitwarden, για την αυτόματη συμπλήρωση συνδέσεων.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeEmail" xml:space="preserve">
|
<data name="ChangeEmail" xml:space="preserve">
|
||||||
<value>Αλλαγή διεύθυνσης ηλ. ταχυδρομείου</value>
|
<value>Αλλαγή email</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeEmailConfirmation" xml:space="preserve">
|
<data name="ChangeEmailConfirmation" xml:space="preserve">
|
||||||
<value>Μπορείτε να αλλάξετε τη διεύθυνση του email σας στο bitwarden.com. Θέλετε να επισκεφθείτε την ιστοσελίδα τώρα;</value>
|
<value>Μπορείτε να αλλάξετε τη διεύθυνση του email σας στο bitwarden.com. Θέλετε να επισκεφθείτε την ιστοσελίδα τώρα;</value>
|
||||||
@@ -550,10 +550,10 @@
|
|||||||
<value>Άμεσα</value>
|
<value>Άμεσα</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeout" xml:space="preserve">
|
<data name="VaultTimeout" xml:space="preserve">
|
||||||
<value>Χρόνος λήξης κρύπτης</value>
|
<value>Χρόνος λήξης vault</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutAction" xml:space="preserve">
|
<data name="VaultTimeoutAction" xml:space="preserve">
|
||||||
<value>Ενέργεια χρόνου λήξης κρύπτης</value>
|
<value>Ενέργεια χρόνου λήξης vault</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
||||||
<value>Η αποσύνδεση θα καταργήσει όλη την πρόσβαση στο vault σας και απαιτεί online έλεγχο ταυτότητας μετά το χρονικό όριο λήξης. Είστε βέβαιοι ότι θέλετε να χρησιμοποιήσετε αυτήν τη ρύθμιση;</value>
|
<value>Η αποσύνδεση θα καταργήσει όλη την πρόσβαση στο vault σας και απαιτεί online έλεγχο ταυτότητας μετά το χρονικό όριο λήξης. Είστε βέβαιοι ότι θέλετε να χρησιμοποιήσετε αυτήν τη ρύθμιση;</value>
|
||||||
@@ -644,7 +644,7 @@
|
|||||||
<value>Είστε βέβαιοι ότι θέλετε να αντικαταστήσετε τον τρέχον κωδικό;</value>
|
<value>Είστε βέβαιοι ότι θέλετε να αντικαταστήσετε τον τρέχον κωδικό;</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PushNotificationAlert" xml:space="preserve">
|
<data name="PushNotificationAlert" xml:space="preserve">
|
||||||
<value>Το Bitwarden διατηρεί αυτόματα συγχρονισμένη την κρύπτη σας με τη χρήση ειδοποιήσεων push. Για την καλύτερη δυνατή εμπειρία, επιλέξτε «Αποδοχή» στο ακόλουθο μήνυμα ερώτησης όταν σας ζητηθεί να ενεργοποιήσετε τις ειδοποιήσεις push.</value>
|
<value>Το Bitwarden κρατάει συγχρονισμένο το vault σας αυτόματα, με τη χρήση ειδοποιήσεων push. Για την καλύτερη δυνατή εμπειρία, επιλέξτε "Να επιτρέπεται" στην παρακάτω προτροπή όταν σας ζητηθεί να ενεργοποιήσετε τις ειδοποιήσεις push.</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">
|
||||||
@@ -660,7 +660,7 @@
|
|||||||
<value>Εισάγετε ξανά τον κύριο κωδικό</value>
|
<value>Εισάγετε ξανά τον κύριο κωδικό</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchVault" xml:space="preserve">
|
<data name="SearchVault" xml:space="preserve">
|
||||||
<value>Αναζήτηση κρύπτης</value>
|
<value>Αναζήτηση στο vault</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Security" xml:space="preserve">
|
<data name="Security" xml:space="preserve">
|
||||||
<value>Ασφάλεια</value>
|
<value>Ασφάλεια</value>
|
||||||
@@ -695,7 +695,7 @@
|
|||||||
<value>Ο συγχρονισμός απέτυχε</value>
|
<value>Ο συγχρονισμός απέτυχε</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SyncVaultNow" xml:space="preserve">
|
<data name="SyncVaultNow" xml:space="preserve">
|
||||||
<value>Συγχρονισμός κρύπτης τώρα</value>
|
<value>Συγχρονισμός του vault τώρα</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TouchID" xml:space="preserve">
|
<data name="TouchID" xml:space="preserve">
|
||||||
<value>Touch ID</value>
|
<value>Touch ID</value>
|
||||||
@@ -721,7 +721,7 @@
|
|||||||
<value>Προβολή στοιχείου</value>
|
<value>Προβολή στοιχείου</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WebVault" xml:space="preserve">
|
<data name="WebVault" xml:space="preserve">
|
||||||
<value>Διαδικτυακή κρύπτη Bitwarden</value>
|
<value>Διαδικτυακό vault Bitwarden</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Lost2FAApp" xml:space="preserve">
|
<data name="Lost2FAApp" xml:space="preserve">
|
||||||
<value>Χάσατε την εφαρμογή επαλήθευσης;</value>
|
<value>Χάσατε την εφαρμογή επαλήθευσης;</value>
|
||||||
@@ -790,10 +790,10 @@
|
|||||||
<value>Είστε βέβαιοι για την αυτόματη συμπλήρωση αυτού του στοιχείου; Δεν υπάρχει πλήρης αντιστοιχία για "{0}".</value>
|
<value>Είστε βέβαιοι για την αυτόματη συμπλήρωση αυτού του στοιχείου; Δεν υπάρχει πλήρης αντιστοιχία για "{0}".</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MatchingItems" xml:space="preserve">
|
<data name="MatchingItems" xml:space="preserve">
|
||||||
<value>Αντίστοιχα στοιχεία</value>
|
<value>Αντιστοίχιση Στοιχείων</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PossibleMatchingItems" xml:space="preserve">
|
<data name="PossibleMatchingItems" xml:space="preserve">
|
||||||
<value>Πιθανά αντικείμενα που ταιριάζουν</value>
|
<value>Πιθανά Στοιχεία Αντιστοίχισης</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Search" xml:space="preserve">
|
<data name="Search" xml:space="preserve">
|
||||||
<value>Αναζήτηση</value>
|
<value>Αναζήτηση</value>
|
||||||
@@ -809,7 +809,7 @@
|
|||||||
<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>Εφαρμογή Επαλήθευσης</value>
|
<value>Εφαρμογή αυθεντικοποίησης</value>
|
||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnterVerificationCodeApp" xml:space="preserve">
|
<data name="EnterVerificationCodeApp" xml:space="preserve">
|
||||||
@@ -850,7 +850,7 @@
|
|||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationEmailSent" xml:space="preserve">
|
<data name="VerificationEmailSent" xml:space="preserve">
|
||||||
<value>Το μήνυμα επιβεβαίωσης ηλ. ταχυδρομείου στάλθηκε</value>
|
<value>Το email επιβεβαίωσης στάλθηκε</value>
|
||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="YubiKeyInstruction" xml:space="preserve">
|
<data name="YubiKeyInstruction" xml:space="preserve">
|
||||||
@@ -949,7 +949,7 @@
|
|||||||
<value>Δεν μπορείτε να χρησιμοποιήσετε αυτήν τη δυνατότητα μέχρι να ενημερώσετε το κλειδί κρυπτογράφησης.</value>
|
<value>Δεν μπορείτε να χρησιμοποιήσετε αυτήν τη δυνατότητα μέχρι να ενημερώσετε το κλειδί κρυπτογράφησης.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EncryptionKeyMigrationRequiredDescriptionLong" xml:space="preserve">
|
<data name="EncryptionKeyMigrationRequiredDescriptionLong" xml:space="preserve">
|
||||||
<value>Απαιτείται μεταφορά του κλειδιού κρυπτογράφησης. Παρακαλούμε συνδεθείτε μέσω της διαδικτυακής κρύπτης για να ενημερώσετε το κλειδί κρυπτογράφησης.</value>
|
<value>Απαιτείται μεταφορά του κλειδιού κρυπτογράφησης. Παρακαλούμε συνδεθείτε μέσω του διαδικτυακού vault για να ενημερώσετε το κλειδί κρυπτογράφησης.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnMore" xml:space="preserve">
|
<data name="LearnMore" xml:space="preserve">
|
||||||
<value>Μάθετε περισσότερα</value>
|
<value>Μάθετε περισσότερα</value>
|
||||||
@@ -984,7 +984,7 @@
|
|||||||
<value>URL Διακομιστή</value>
|
<value>URL Διακομιστή</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WebVaultUrl" xml:space="preserve">
|
<data name="WebVaultUrl" xml:space="preserve">
|
||||||
<value>URL διακομιστή διαδικτυακής κρύπτης</value>
|
<value>URL διακομιστή διαδικτυακού vault</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
|
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
|
||||||
<value>Πατήστε στην ειδοποίηση για να συμπληρώσετε αυτόματα ένα στοιχείο από τη λίστα σας.</value>
|
<value>Πατήστε στην ειδοποίηση για να συμπληρώσετε αυτόματα ένα στοιχείο από τη λίστα σας.</value>
|
||||||
@@ -1101,7 +1101,7 @@
|
|||||||
<value>Κα</value>
|
<value>Κα</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Mx" xml:space="preserve">
|
<data name="Mx" xml:space="preserve">
|
||||||
<value>Ουδέτερο</value>
|
<value>Mx στα Ελληνικά</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="November" xml:space="preserve">
|
<data name="November" xml:space="preserve">
|
||||||
<value>Νοέμβριος</value>
|
<value>Νοέμβριος</value>
|
||||||
@@ -1195,7 +1195,7 @@
|
|||||||
<value>Windows Hello</value>
|
<value>Windows Hello</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
||||||
<value>Δεν μπορέσαμε να ανοίξουμε αυτόματα το μενού ρυθμίσεων παρόχου διαπιστευτηρίων Android για εσάς. Μπορείτε να μεταβείτε στο μενού ρυθμίσεων του παρόχου διαπιστευτηρίων χειροκίνητα από τις ρυθμίσεις Android > Σύστημα > Κωδικοί πρόσβασης & λογαριασμοί > Κωδικοί πρόσβασης, συνθηματικά και υπηρεσίες δεδομένων.</value>
|
<value>We were unable to automatically open the Android credential provider settings menu for you. You can navigate to the credential provider settings menu manually from Android Settings > System > Passwords & accounts > Passwords, passkeys and data services.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||||
<value>Δεν ήταν δυνατό να ανοίξουμε αυτόματα το μενού ρυθμίσεων αυτόματης συμπλήρωσης Android για εσάς. Μπορείτε να πλοηγηθείτε στο μενού ρυθμίσεων αυτόματης συμπλήρωσης με μη αυτόματο τρόπο από τις Ρυθμίσεις Android > Σύστημα > Γλώσσες και εισαγωγή > Σύνθετες > Υπηρεσία αυτόματης συμπλήρωσης.</value>
|
<value>Δεν ήταν δυνατό να ανοίξουμε αυτόματα το μενού ρυθμίσεων αυτόματης συμπλήρωσης Android για εσάς. Μπορείτε να πλοηγηθείτε στο μενού ρυθμίσεων αυτόματης συμπλήρωσης με μη αυτόματο τρόπο από τις Ρυθμίσεις Android > Σύστημα > Γλώσσες και εισαγωγή > Σύνθετες > Υπηρεσία αυτόματης συμπλήρωσης.</value>
|
||||||
@@ -1252,7 +1252,7 @@
|
|||||||
<value>Έναρξη με</value>
|
<value>Έναρξη με</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="URIMatchDetection" xml:space="preserve">
|
<data name="URIMatchDetection" xml:space="preserve">
|
||||||
<value>Εντοπισμός αντιστοίχισης URI</value>
|
<value>Εντοπισμός Αντιστοίχισης URI</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MatchDetection" xml:space="preserve">
|
<data name="MatchDetection" xml:space="preserve">
|
||||||
<value>Εντοπισμός αντιστοίχισης</value>
|
<value>Εντοπισμός αντιστοίχισης</value>
|
||||||
@@ -1384,10 +1384,10 @@
|
|||||||
<value>Αναζήτηση στη συλλογή</value>
|
<value>Αναζήτηση στη συλλογή</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchFileSends" xml:space="preserve">
|
<data name="SearchFileSends" xml:space="preserve">
|
||||||
<value>Αναζήτηση αρχείων Send</value>
|
<value>Αναζήτηση αρχείων Sends</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchTextSends" xml:space="preserve">
|
<data name="SearchTextSends" xml:space="preserve">
|
||||||
<value>Αναζήτηση κειμένων Send</value>
|
<value>Αναζήτηση Κειμένου Sends</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchGroup" xml:space="preserve">
|
<data name="SearchGroup" xml:space="preserve">
|
||||||
<value>Αναζήτηση {0}</value>
|
<value>Αναζήτηση {0}</value>
|
||||||
@@ -1471,7 +1471,7 @@
|
|||||||
<value>Το Bitwarden επιτρέπει να μοιράζεστε τα στοιχεία του vault σας με άλλους χρησιμοποιώντας ένα λογαριασμό οργανισμού. Θέλετε να επισκεφθείτε την ιστοσελίδα bitwarden.com για να μάθετε περισσότερα;</value>
|
<value>Το Bitwarden επιτρέπει να μοιράζεστε τα στοιχεία του vault σας με άλλους χρησιμοποιώντας ένα λογαριασμό οργανισμού. Θέλετε να επισκεφθείτε την ιστοσελίδα bitwarden.com για να μάθετε περισσότερα;</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVault" xml:space="preserve">
|
<data name="ExportVault" xml:space="preserve">
|
||||||
<value>Εξαγωγή κρύπτης</value>
|
<value>Εξαγωγή του vault</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LockNow" xml:space="preserve">
|
<data name="LockNow" xml:space="preserve">
|
||||||
<value>Κλείδωμα τώρα</value>
|
<value>Κλείδωμα τώρα</value>
|
||||||
@@ -1483,7 +1483,7 @@
|
|||||||
<value>Ξεκλείδωμα</value>
|
<value>Ξεκλείδωμα</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnlockVault" xml:space="preserve">
|
<data name="UnlockVault" xml:space="preserve">
|
||||||
<value>Ξεκλείδωμα κρύπτης</value>
|
<value>Ξεκλείδωμα του vault</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThirtyMinutes" xml:space="preserve">
|
<data name="ThirtyMinutes" xml:space="preserve">
|
||||||
<value>30 λεπτά</value>
|
<value>30 λεπτά</value>
|
||||||
@@ -1536,7 +1536,7 @@
|
|||||||
<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</value>
|
<value>Προεπιλεγμένη Ανίχνευση Αντιστοιχίας URI</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">
|
||||||
@@ -1583,16 +1583,16 @@
|
|||||||
<value>Αυτόματη συμπλήρωση μπλοκαρισμένων URI</value>
|
<value>Αυτόματη συμπλήρωση μπλοκαρισμένων URI</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AskToAddLogin" xml:space="preserve">
|
<data name="AskToAddLogin" xml:space="preserve">
|
||||||
<value>Ρώτησε για να προσθέσεις σύνδεση</value>
|
<value>Ρωτήστε για να προσθέστε σύνδεση</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AskToAddLoginDescription" xml:space="preserve">
|
<data name="AskToAddLoginDescription" xml:space="preserve">
|
||||||
<value>Ρώτησε για να προσθέσεις κάποιο αντικείμενο αν δε βρεθεί στη κρύπτη μου.</value>
|
<value>Ρωτήστε για να προσθέσετε ένα αντικείμενο αν δε βρεθεί στο vault σας.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OnRestart" xml:space="preserve">
|
<data name="OnRestart" xml:space="preserve">
|
||||||
<value>Κατά την επανεκκίνηση της εφαρμογής</value>
|
<value>Κατά την επανεκκίνηση της εφαρμογής</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServiceNotEnabled" xml:space="preserve">
|
<data name="AutofillServiceNotEnabled" xml:space="preserve">
|
||||||
<value>Η αυτόματη συμπλήρωση διευκολύνει την ασφαλή πρόσβαση στην κρύπτη του Bitwarden από άλλες ιστοσελίδες και εφαρμογές. Φαίνεται ότι δεν έχετε ενεργοποιήσει την υπηρεσία αυτόματης συμπλήρωσης για το Bitwarden. Ενεργοποιήστε την αυτόματη συμπλήρωση από τις "Ρυθμίσεις".</value>
|
<value>Η αυτόματη συμπλήρωση διευκολύνει την ασφαλή πρόσβαση στο vault του Bitwarden από άλλες ιστοσελίδες και εφαρμογές. Φαίνεται ότι δεν έχετε ενεργοποιήσει την υπηρεσία αυτόματης συμπλήρωσης για το Bitwarden. Ενεργοποιήστε την αυτόματη συμπλήρωση από τις "Ρυθμίσεις".</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThemeAppliedOnRestart" xml:space="preserve">
|
<data name="ThemeAppliedOnRestart" xml:space="preserve">
|
||||||
<value>Οι αλλαγές θεμάτων θα ισχύουν όταν γίνει επανεκκίνηση της εφαρμογής.</value>
|
<value>Οι αλλαγές θεμάτων θα ισχύουν όταν γίνει επανεκκίνηση της εφαρμογής.</value>
|
||||||
@@ -1629,7 +1629,7 @@
|
|||||||
<value>Το Bitwarden χρειάζεται προσοχή - Ανατρέξτε στην ενότητα "Υπηρεσία προσβασιμότητας αυτόματης συμπλήρωσης" από τις ρυθμίσεις Bitwarden</value>
|
<value>Το Bitwarden χρειάζεται προσοχή - Ανατρέξτε στην ενότητα "Υπηρεσία προσβασιμότητας αυτόματης συμπλήρωσης" από τις ρυθμίσεις Bitwarden</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceOverlayPermission" xml:space="preserve">
|
<data name="BitwardenAutofillServiceOverlayPermission" xml:space="preserve">
|
||||||
<value>3. Στην οθόνη Ρυθμίσεων της Εφαρμογής Android του Bitwarden, μεταβείτε στην ενότητα "Εμφάνιση πάνω από άλλες εφαρμογές" επιλογές (για προχωρημένους) και πατήστε το κουμπί για να ενεργοποιήσετε την υποστήριξη επικάλυψης.</value>
|
<value>3. Στις Ρυθμίσεις του Bitwarden για Android , μεταβείτε στην ενότητα "Εμφάνιση από άλλες εφαρμογές" (Για προχωρημένους) και πατήστε το διακόπτη για να ενεργοποιήσετε την υποστήριξη επικάλυψης.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OverlayPermission" xml:space="preserve">
|
<data name="OverlayPermission" xml:space="preserve">
|
||||||
<value>Άδειες</value>
|
<value>Άδειες</value>
|
||||||
@@ -1671,7 +1671,7 @@
|
|||||||
<value>Τα κλειδιά κρυπτογράφησης λογαριασμού είναι μοναδικά για κάθε λογαριασμό χρήστη Bitwarden, οπότε δεν μπορείτε να εισάγετε μια κρυπτογραφημένη εξαγωγή σε διαφορετικό λογαριασμό.</value>
|
<value>Τα κλειδιά κρυπτογράφησης λογαριασμού είναι μοναδικά για κάθε λογαριασμό χρήστη Bitwarden, οπότε δεν μπορείτε να εισάγετε μια κρυπτογραφημένη εξαγωγή σε διαφορετικό λογαριασμό.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVaultConfirmationTitle" xml:space="preserve">
|
<data name="ExportVaultConfirmationTitle" xml:space="preserve">
|
||||||
<value>Επιβεβαίωση εξαγωγής κρύπτης</value>
|
<value>Επιβεβαίωση εξαγωγής vault</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">
|
||||||
@@ -1723,7 +1723,7 @@
|
|||||||
<comment>Message shown when interacting with the server</comment>
|
<comment>Message shown when interacting with the server</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ItemRestored" xml:space="preserve">
|
<data name="ItemRestored" xml:space="preserve">
|
||||||
<value>Το αντικείμενο επαναφέρθηκε</value>
|
<value>Το στοιχείο έχει ανακτηθεί.</value>
|
||||||
<comment>Confirmation message after successfully restoring a soft-deleted item</comment>
|
<comment>Confirmation message after successfully restoring a soft-deleted item</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Trash" xml:space="preserve">
|
<data name="Trash" xml:space="preserve">
|
||||||
@@ -1771,7 +1771,7 @@
|
|||||||
<value>Δεν είναι δυνατή η σύνδεση με SSO</value>
|
<value>Δεν είναι δυνατή η σύνδεση με SSO</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetMasterPassword" xml:space="preserve">
|
<data name="SetMasterPassword" xml:space="preserve">
|
||||||
<value>Ορισμός κύριου κωδικού πρόσβασης</value>
|
<value>Ορισμός Κύριου Κωδικού</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetMasterPasswordSummary" xml:space="preserve">
|
<data name="SetMasterPasswordSummary" xml:space="preserve">
|
||||||
<value>Για να ολοκληρώσετε τη σύνδεση με SSO, ορίστε έναν κύριο κωδικό πρόσβασης για πρόσβαση και προστασία του vault σας.</value>
|
<value>Για να ολοκληρώσετε τη σύνδεση με SSO, ορίστε έναν κύριο κωδικό πρόσβασης για πρόσβαση και προστασία του vault σας.</value>
|
||||||
@@ -1798,7 +1798,7 @@
|
|||||||
<value>Να περιέχει έναν ή περισσότερους από τους ακόλουθους ειδικούς χαρακτήρες {0}</value>
|
<value>Να περιέχει έναν ή περισσότερους από τους ακόλουθους ειδικούς χαρακτήρες {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordPolicyValidationTitle" xml:space="preserve">
|
<data name="MasterPasswordPolicyValidationTitle" xml:space="preserve">
|
||||||
<value>Μη έγκυρος κωδικός πρόσβασης</value>
|
<value>Λανθασμένος Κωδικός</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordPolicyValidationMessage" xml:space="preserve">
|
<data name="MasterPasswordPolicyValidationMessage" xml:space="preserve">
|
||||||
<value>Ο κωδικός πρόσβασης δεν πληροί τις απαιτήσεις του οργανισμού. Ελέγξτε τις πληροφορίες πολιτικής και δοκιμάστε ξανά.</value>
|
<value>Ο κωδικός πρόσβασης δεν πληροί τις απαιτήσεις του οργανισμού. Ελέγξτε τις πληροφορίες πολιτικής και δοκιμάστε ξανά.</value>
|
||||||
@@ -1822,10 +1822,10 @@
|
|||||||
<value>Το Bitwarden χρειάζεται προσοχή - Ενεργοποιήστε το "Draw-Over" στις "Υπηρεσίες αυτόματης συμπλήρωσης" από το Bitwarden Settings</value>
|
<value>Το Bitwarden χρειάζεται προσοχή - Ενεργοποιήστε το "Draw-Over" στις "Υπηρεσίες αυτόματης συμπλήρωσης" από το Bitwarden Settings</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyManagement" xml:space="preserve">
|
<data name="PasskeyManagement" xml:space="preserve">
|
||||||
<value>Διαχείριση κλειδιού πρόσβασης</value>
|
<value>Passkey management</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServices" xml:space="preserve">
|
<data name="AutofillServices" xml:space="preserve">
|
||||||
<value>Υπηρεσία αυτόματης συμπλήρωσης</value>
|
<value>Υπηρεσία Αυτόματης Συμπλήρωσης</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InlineAutofill" xml:space="preserve">
|
<data name="InlineAutofill" xml:space="preserve">
|
||||||
<value>Χρησιμοποιήστε Inline Αυτόματη συμπλήρωση</value>
|
<value>Χρησιμοποιήστε Inline Αυτόματη συμπλήρωση</value>
|
||||||
@@ -1834,7 +1834,7 @@
|
|||||||
<value>Χρησιμοποιήστε ενσωματωμένη αυτόματη συμπλήρωση εάν το επιλεγμένο IME (πληκτρολόγιο) το υποστηρίζει. Εάν η διαμόρφωση δεν υποστηρίζεται (ή αυτή η επιλογή είναι απενεργοποιημένη), θα χρησιμοποιηθεί η προεπιλεγμένη επικάλυψη αυτόματης συμπλήρωσης.</value>
|
<value>Χρησιμοποιήστε ενσωματωμένη αυτόματη συμπλήρωση εάν το επιλεγμένο IME (πληκτρολόγιο) το υποστηρίζει. Εάν η διαμόρφωση δεν υποστηρίζεται (ή αυτή η επιλογή είναι απενεργοποιημένη), θα χρησιμοποιηθεί η προεπιλεγμένη επικάλυψη αυτόματης συμπλήρωσης.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Accessibility" xml:space="preserve">
|
<data name="Accessibility" xml:space="preserve">
|
||||||
<value>Χρήση προσβασιμότητας</value>
|
<value>Χρησιμοποιήστε την Προσβασιμότητα</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDescription" xml:space="preserve">
|
<data name="AccessibilityDescription" xml:space="preserve">
|
||||||
<value>Χρησιμοποιήστε την υπηρεσία προσβασιμότητας Bitwarden για να συμπληρώσετε αυτόματα τις συνδέσεις σας σε εφαρμογές και στον ιστό. Όταν είναι ενεργοποιημένο, θα εμφανιστεί ένα αναδυόμενο παράθυρο όταν επιλέγονται πεδία σύνδεσης</value>
|
<value>Χρησιμοποιήστε την υπηρεσία προσβασιμότητας Bitwarden για να συμπληρώσετε αυτόματα τις συνδέσεις σας σε εφαρμογές και στον ιστό. Όταν είναι ενεργοποιημένο, θα εμφανιστεί ένα αναδυόμενο παράθυρο όταν επιλέγονται πεδία σύνδεσης</value>
|
||||||
@@ -1861,7 +1861,7 @@
|
|||||||
<value>Εάν είναι ενεργοποιημένη, η προσβασιμότητα θα εμφανίσει ένα αναδυόμενο παράθυρο για την αύξηση της υπηρεσίας αυτόματης συμπλήρωσης για παλαιότερες εφαρμογές που δεν υποστηρίζουν το Android Autofill Framework.</value>
|
<value>Εάν είναι ενεργοποιημένη, η προσβασιμότητα θα εμφανίσει ένα αναδυόμενο παράθυρο για την αύξηση της υπηρεσίας αυτόματης συμπλήρωσης για παλαιότερες εφαρμογές που δεν υποστηρίζουν το Android Autofill Framework.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PersonalOwnershipSubmitError" xml:space="preserve">
|
<data name="PersonalOwnershipSubmitError" xml:space="preserve">
|
||||||
<value>Λόγω μιας Πολιτικής Επιχειρήσεων, δεν επιτρέπεται η αποθήκευση αντικειμένων στη προσωπικό σας κρύπτη. Αλλάξτε την επιλογή Ιδιοκτησίας σε έναν οργανισμό και επιλέξτε από τις διαθέσιμες Συλλογές.</value>
|
<value>Λόγω μιας Πολιτικής Επιχειρήσεων, δεν επιτρέπεται η αποθήκευση αντικειμένων στο προσωπικό σας vault. Αλλάξτε την επιλογή Ιδιοκτησίας σε έναν οργανισμό και επιλέξτε από τις διαθέσιμες Συλλογές.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PersonalOwnershipPolicyInEffect" xml:space="preserve">
|
<data name="PersonalOwnershipPolicyInEffect" xml:space="preserve">
|
||||||
<value>Μια πολιτική οργανισμού, επηρεάζει τις επιλογές ιδιοκτησίας σας.</value>
|
<value>Μια πολιτική οργανισμού, επηρεάζει τις επιλογές ιδιοκτησίας σας.</value>
|
||||||
@@ -1976,7 +1976,7 @@
|
|||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="DisableSend" xml:space="preserve">
|
<data name="DisableSend" xml:space="preserve">
|
||||||
<value>Απενεργοποιήστε αυτό το Send έτσι ώστε κανείς να μην έχει πρόσβαση σε αυτό</value>
|
<value>Απενεργοποιήστε αυτό το Send έτσι ώστε κανείς να μην μπορεί να έχει πρόσβαση σε αυτό.</value>
|
||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoSends" xml:space="preserve">
|
<data name="NoSends" xml:space="preserve">
|
||||||
@@ -2006,7 +2006,7 @@
|
|||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="AddSend" xml:space="preserve">
|
<data name="AddSend" xml:space="preserve">
|
||||||
<value>Νέο Send</value>
|
<value>Προσθήκη Send</value>
|
||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="AreYouSureDeleteSend" xml:space="preserve">
|
<data name="AreYouSureDeleteSend" xml:space="preserve">
|
||||||
@@ -2014,15 +2014,15 @@
|
|||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="SendDeleted" xml:space="preserve">
|
<data name="SendDeleted" xml:space="preserve">
|
||||||
<value>Το Send διαγράφηκε</value>
|
<value>Το send έχει διαγραφεί.</value>
|
||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="SendUpdated" xml:space="preserve">
|
<data name="SendUpdated" xml:space="preserve">
|
||||||
<value>Το Send αποθηκεύτηκε</value>
|
<value>Το send ενημερώθηκε.</value>
|
||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="NewSendCreated" xml:space="preserve">
|
<data name="NewSendCreated" xml:space="preserve">
|
||||||
<value>Το Send δημιουργήθηκε</value>
|
<value>Δημιουργήθηκε νέο send.</value>
|
||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="OneDay" xml:space="preserve">
|
<data name="OneDay" xml:space="preserve">
|
||||||
@@ -2092,10 +2092,10 @@
|
|||||||
<value>Ενημερώστε τον κύριο κωδικό πρόσβασης</value>
|
<value>Ενημερώστε τον κύριο κωδικό πρόσβασης</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UpdateMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Ο Κύριος Κωδικός Πρόσβασής σας άλλαξε πρόσφατα από διαχειριστή στον οργανισμό σας. Για να αποκτήσετε πρόσβαση στη κρύπτη, πρέπει να ενημερώσετε το κύριο κωδικό τώρα. Η διαδικασία θα σας αποσυνδέσει από την τρέχουσα συνεδρία σας, απαιτώντας από εσάς να συνδεθείτε ξανά. Οι ενεργές συνεδρίες σε άλλες συσκευές ενδέχεται να συνεχίσουν να είναι ενεργές για μία ώρα.</value>
|
<value>Ο Κύριος Κωδικός Πρόσβασής σας άλλαξε πρόσφατα από διαχειριστή στον οργανισμό σας. Για να αποκτήσετε πρόσβαση στο vault, πρέπει να ενημερώσετε το κύριο κωδικό τώρα. Η διαδικασία θα σας αποσυνδέσει από την τρέχουσα συνεδρία σας, απαιτώντας από εσάς να συνδεθείτε ξανά. Οι ενεργές συνεδρίες σε άλλες συσκευές ενδέχεται να συνεχίσουν να είναι ενεργές για μία ώρα.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UpdatingPassword" xml:space="preserve">
|
<data name="UpdatingPassword" xml:space="preserve">
|
||||||
<value>Ενημέρωση κωδικού πρόσβασης</value>
|
<value>Ενημέρωση Κωδικού Πρόσβασης</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UpdatePasswordError" xml:space="preserve">
|
<data name="UpdatePasswordError" xml:space="preserve">
|
||||||
<value>Δεν είναι δυνατή η ενημέρωση του κωδικού πρόσβασης</value>
|
<value>Δεν είναι δυνατή η ενημέρωση του κωδικού πρόσβασης</value>
|
||||||
@@ -2107,7 +2107,7 @@
|
|||||||
<value>{0} χρησιμοποιεί SSO με κρυπτογράφηση διαχείρισης πελατών. Συνεχίζοντας θα καταργήσετε τον Κύριο Κωδικό από το λογαριασμό σας και θα απαιτήσετε SSO για να συνδεθείτε.</value>
|
<value>{0} χρησιμοποιεί SSO με κρυπτογράφηση διαχείρισης πελατών. Συνεχίζοντας θα καταργήσετε τον Κύριο Κωδικό από το λογαριασμό σας και θα απαιτήσετε SSO για να συνδεθείτε.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RemoveMasterPasswordWarning2" xml:space="preserve">
|
<data name="RemoveMasterPasswordWarning2" xml:space="preserve">
|
||||||
<value>Αν δε θέλετε να αφαιρέσετε τον κύριο κωδικό πρόσβασής σας, μπορείτε να φύγετε από αυτόν τον οργανισμό.</value>
|
<value>Αν δεν θέλετε να αφαιρέσετε τον Κύριο Κωδικό Πρόσβασης, μπορείτε να φύγετε από αυτόν τον οργανισμό.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LeaveOrganization" xml:space="preserve">
|
<data name="LeaveOrganization" xml:space="preserve">
|
||||||
<value>Αποχώρηση από τον οργανισμό</value>
|
<value>Αποχώρηση από τον οργανισμό</value>
|
||||||
@@ -2137,22 +2137,22 @@
|
|||||||
<value>Αυτός ο οργανισμός έχει μια επιχειρηματική πολιτική που θα σας εγγράψει αυτόματα στην επαναφορά κωδικού. Η εγγραφή θα επιτρέψει στους διαχειριστές του οργανισμού να αλλάξουν τον κύριο κωδικό πρόσβασης σας.</value>
|
<value>Αυτός ο οργανισμός έχει μια επιχειρηματική πολιτική που θα σας εγγράψει αυτόματα στην επαναφορά κωδικού. Η εγγραφή θα επιτρέψει στους διαχειριστές του οργανισμού να αλλάξουν τον κύριο κωδικό πρόσβασης σας.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
|
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
|
||||||
<value>Οι πολιτικές του οργανισμού σας επηρεάζουν το χρονικό όριο της κρύπτης σας. Το μέγιστο επιτρεπόμενο Χρονικό όριο Κρύπτης είναι {0} ώρα(ες) και {1} λεπτό(ά).</value>
|
<value>Οι πολιτικές του οργανισμού σας επηρεάζουν το χρονικό όριο vault σας. Το μέγιστο επιτρεπόμενο Χρονικό όριο Vault είναι {0} ώρα(ες) και {1} λεπτό(ά)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
||||||
<value>Οι πολιτικές του οργανισμού σας επηρεάζουν το χρονικό όριο της κρύπτης σας. Το μέγιστο επιτρεπόμενο χρονικό όριο κρύπτης είναι {0} ώρα(ες) και {1} λεπτό(ά). Το χρονικό όριο του vault σας έχει οριστεί σε {2}.</value>
|
<value>Οι πολιτικές του οργανισμού σας επηρεάζουν το χρονικό όριο του vault σας. Το μέγιστο επιτρεπόμενο χρονικό όριο vault είναι {0} ώρα(ες) και {1} λεπτό(ά). Το χρονικό όριο του vault σας έχει οριστεί σε {2}.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
|
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
|
||||||
<value>Οι πολιτικές του οργανισμού σας έχουν ορίσει την ενέργεια χρονικού ορίου λήξης κρύπτης σε {0}.</value>
|
<value>Οι πολιτικές του οργανισμού σας έχουν ορίσει την ενέργεια χρονικού ορίου vault σε {0}.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutToLarge" xml:space="preserve">
|
<data name="VaultTimeoutToLarge" xml:space="preserve">
|
||||||
<value>Το χρονικό όριο του vault σας υπερβαίνει τους περιορισμούς που έχει ορίσει ο οργανισμός σας.</value>
|
<value>Το χρονικό όριο του vault σας υπερβαίνει τους περιορισμούς που έχει ορίσει ο οργανισμός σας.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
|
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
|
||||||
<value>Μία ή περισσότερες οργανωτικές πολιτικές αποτρέπουν την εξαγωγή της προσωπικής κρύπτης.</value>
|
<value>Μία ή περισσότερες οργανωτικές πολιτικές αποτρέπουν την εξαγωγή του προσωπικού vault.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AddAccount" xml:space="preserve">
|
<data name="AddAccount" xml:space="preserve">
|
||||||
<value>Προσθήκη λογαριασμού</value>
|
<value>Προσθήκη Λογαριασμού</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountUnlocked" xml:space="preserve">
|
<data name="AccountUnlocked" xml:space="preserve">
|
||||||
<value>Ξεκλειδώθηκε</value>
|
<value>Ξεκλειδώθηκε</value>
|
||||||
@@ -2167,7 +2167,7 @@
|
|||||||
<value>Μετάβαση στον επόμενο διαθέσιμο λογαριασμό</value>
|
<value>Μετάβαση στον επόμενο διαθέσιμο λογαριασμό</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountLockedSuccessfully" xml:space="preserve">
|
<data name="AccountLockedSuccessfully" xml:space="preserve">
|
||||||
<value>Ο λογαριασμός κλειδώθηκε</value>
|
<value>Κλειδωμένος Λογαριασμός</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountLoggedOutSuccessfully" xml:space="preserve">
|
<data name="AccountLoggedOutSuccessfully" xml:space="preserve">
|
||||||
<value>Ο λογαριασμός αποσυνδέθηκε επιτυχώς</value>
|
<value>Ο λογαριασμός αποσυνδέθηκε επιτυχώς</value>
|
||||||
@@ -2176,13 +2176,13 @@
|
|||||||
<value>Ο λογαριασμός αφαιρέθηκε επιτυχώς</value>
|
<value>Ο λογαριασμός αφαιρέθηκε επιτυχώς</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DeleteAccount" xml:space="preserve">
|
<data name="DeleteAccount" xml:space="preserve">
|
||||||
<value>Διαγραφή λογαριασμού</value>
|
<value>Διαγραφή Λογαριασμού</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DeletingYourAccountIsPermanent" xml:space="preserve">
|
<data name="DeletingYourAccountIsPermanent" xml:space="preserve">
|
||||||
<value>Η διαγραφή του λογαριασμού σας είναι μόνιμη</value>
|
<value>Η διαγραφή του λογαριασμού σας είναι μόνιμη</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DeleteAccountExplanation" xml:space="preserve">
|
<data name="DeleteAccountExplanation" xml:space="preserve">
|
||||||
<value>Ο λογαριασμός σας και όλα τα σχετικά δεδομένα θα διαγραφούν και δε θα ανακτηθούν. Σίγουρα θέλετε να συνεχίσετε;</value>
|
<value>Ο λογαριασμός σας και όλα τα σχετικά δεδομένα θα διαγραφούν και δεν θα ανακτηθούν. Είστε σίγουροι ότι θέλετε να συνεχίσετε?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DeletingYourAccount" xml:space="preserve">
|
<data name="DeletingYourAccount" xml:space="preserve">
|
||||||
<value>Διαγραφή του λογαριασμού σας</value>
|
<value>Διαγραφή του λογαριασμού σας</value>
|
||||||
@@ -2191,7 +2191,7 @@
|
|||||||
<value>Ο λογαριασμός σας έχει διαγραφεί οριστικά</value>
|
<value>Ο λογαριασμός σας έχει διαγραφεί οριστικά</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InvalidVerificationCode" xml:space="preserve">
|
<data name="InvalidVerificationCode" xml:space="preserve">
|
||||||
<value>Μη έγκυρος κωδικός επαλήθευσης</value>
|
<value>Μη Έγκυρος Κωδικός Επαλήθευσης.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RequestOTP" xml:space="preserve">
|
<data name="RequestOTP" xml:space="preserve">
|
||||||
<value>Αιτηθείτε τον κωδικό πρόσβασης μιας χρήσης</value>
|
<value>Αιτηθείτε τον κωδικό πρόσβασης μιας χρήσης</value>
|
||||||
@@ -2260,7 +2260,7 @@
|
|||||||
<value>Φιλτράρισμα αντικειμένων ανά κρύπτη</value>
|
<value>Φιλτράρισμα αντικειμένων ανά κρύπτη</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AllVaults" xml:space="preserve">
|
<data name="AllVaults" xml:space="preserve">
|
||||||
<value>Όλες οι κρύπτες</value>
|
<value>Όλα τα Vaults</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Vaults" xml:space="preserve">
|
<data name="Vaults" xml:space="preserve">
|
||||||
<value>Vaults</value>
|
<value>Vaults</value>
|
||||||
@@ -2390,19 +2390,19 @@
|
|||||||
<value>Τύπος Ονόματος Χρήστη</value>
|
<value>Τύπος Ονόματος Χρήστη</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PlusAddressedEmail" xml:space="preserve">
|
<data name="PlusAddressedEmail" xml:space="preserve">
|
||||||
<value>Συν διεύθυνση ηλ. ταχυδρομείου</value>
|
<value>Συν Διεύθυνση Email</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CatchAllEmail" xml:space="preserve">
|
<data name="CatchAllEmail" xml:space="preserve">
|
||||||
<value>Διεύθυνση ηλ. ταχυδρομείου κάθε σκοπού</value>
|
<value>Catch-all Email</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ForwardedEmailAlias" xml:space="preserve">
|
<data name="ForwardedEmailAlias" xml:space="preserve">
|
||||||
<value>Προωθημένο ψευδώνυμο διεύθυνσης ηλ. ταχυδρομείου</value>
|
<value>Προωθημένο Ψευδώνυμο Email</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RandomWord" xml:space="preserve">
|
<data name="RandomWord" xml:space="preserve">
|
||||||
<value>Τυχαία Λέξη</value>
|
<value>Τυχαία Λέξη</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EmailRequiredParenthesis" xml:space="preserve">
|
<data name="EmailRequiredParenthesis" xml:space="preserve">
|
||||||
<value>Διεύθυνση ηλ. ταχυδρομείου (απαιτείται)</value>
|
<value>Email (απαιτείται)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DomainNameRequiredParenthesis" xml:space="preserve">
|
<data name="DomainNameRequiredParenthesis" xml:space="preserve">
|
||||||
<value>Όνομα Τομέα (απαιτείται)</value>
|
<value>Όνομα Τομέα (απαιτείται)</value>
|
||||||
@@ -2456,13 +2456,13 @@
|
|||||||
<value>Παρουσιάστηκε άγνωστο {0} σφάλμα.</value>
|
<value>Παρουσιάστηκε άγνωστο {0} σφάλμα.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PlusAddressedEmailDescription" xml:space="preserve">
|
<data name="PlusAddressedEmailDescription" xml:space="preserve">
|
||||||
<value>Χρησιμοποιήστε τις δυνατότητες δευτερεύουσας διεύθυνσης του παρόχου του ηλ. ταχυδρομείου σας</value>
|
<value>Χρησιμοποιήστε τις δυνατότητες δευτερεύουσας διεύθυνσης του παρόχου email σας</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CatchAllEmailDescription" xml:space="preserve">
|
<data name="CatchAllEmailDescription" xml:space="preserve">
|
||||||
<value>Χρησιμοποιήστε τα διαμορφωμένα εισερχόμενα κάθε σκοπού του τομέα σας.</value>
|
<value>Χρησιμοποιήστε τα διαμορφωμένα εισερχόμενα catch-all του domain σας.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ForwardedEmailDescription" xml:space="preserve">
|
<data name="ForwardedEmailDescription" xml:space="preserve">
|
||||||
<value>Δημιουργήστε ένα ψευδώνυμο διεύθυνσης ηλ. ταχυδρομείου με μια εξωτερική υπηρεσία προώθησης.</value>
|
<value>Δημιουργήστε ένα ψευδώνυμο email με μια εξωτερική υπηρεσία προώθησης.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Random" xml:space="preserve">
|
<data name="Random" xml:space="preserve">
|
||||||
<value>Τυχαίο</value>
|
<value>Τυχαίο</value>
|
||||||
@@ -2515,7 +2515,7 @@
|
|||||||
<value>Μια ειδοποίηση έχει σταλεί στη συσκευή σας.</value>
|
<value>Μια ειδοποίηση έχει σταλεί στη συσκευή σας.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
|
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
|
||||||
<value>Βεβαιωθείτε ότι η κρύπτη σας είναι ξεκλείδωτη και ότι η Φράση δακτυλικών αποτυπωμάτων ταιριάζει στην άλλη συσκευή.</value>
|
<value>Βεβαιωθείτε ότι το vault σας είναι ξεκλείδωτο και ότι η Φράση δακτυλικών αποτυπωμάτων ταιριάζει στην άλλη συσκευή.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ResendNotification" xml:space="preserve">
|
<data name="ResendNotification" xml:space="preserve">
|
||||||
<value>Επαναποστολή ειδοποίησης</value>
|
<value>Επαναποστολή ειδοποίησης</value>
|
||||||
@@ -2626,7 +2626,7 @@
|
|||||||
<value>Περιοχή</value>
|
<value>Περιοχή</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Ο κύριος κωδικός πρόσβασής σας δεν πληροί μία ή περισσότερες πολιτικές του οργανισμού σας. Για να αποκτήσετε πρόσβαση στη Κρύπτη σας, πρέπει να ενημερώσετε τον κύριο κωδικό πρόσβασής σας τώρα. Η διαδικασία θα σας αποσυνδέσει από την τρέχουσα συνεδρία σας, απαιτώντας από εσάς να συνδεθείτε ξανά. Οι ενεργές συνεδρίες σε άλλες συσκευές ενδέχεται να συνεχίσουν να είναι ενεργές εώς και μία ώρα.</value>
|
<value>Ο κύριος κωδικός πρόσβασής σας δεν πληροί μία ή περισσότερες πολιτικές του οργανισμού σας. Για να αποκτήσετε πρόσβαση στο Vault σας, πρέπει να ενημερώσετε τον κύριο κωδικό πρόσβασής σας τώρα. Η διαδικασία θα σας αποσυνδέσει από την τρέχουσα συνεδρία σας, απαιτώντας από εσάς να συνδεθείτε ξανά. Οι ενεργές συνεδρίες σε άλλες συσκευές ενδέχεται να συνεχίσουν να είναι ενεργές εώς και μία ώρα.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Τρέχων κύριος κωδικός</value>
|
<value>Τρέχων κύριος κωδικός</value>
|
||||||
@@ -2674,7 +2674,7 @@
|
|||||||
<value>Διαθέσιμο για σύνδεση με δύο βήματα</value>
|
<value>Διαθέσιμο για σύνδεση με δύο βήματα</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
<value>Βοήθεια για την απαίτηση κύριου κωδικού πρόσβασης</value>
|
<value>Βοήθεια προτροπής κύριου κωδικού πρόσβασης</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
<value>Το ξεκλείδωμα μπορεί να αποτύχει λόγω ανεπαρκούς μνήμης. Μειώστε τις ρυθμίσεις μνήμης KDF ή ρυθμίστε το βιομετρικό ξεκλείδωμα για επίλυση.</value>
|
<value>Το ξεκλείδωμα μπορεί να αποτύχει λόγω ανεπαρκούς μνήμης. Μειώστε τις ρυθμίσεις μνήμης KDF ή ρυθμίστε το βιομετρικό ξεκλείδωμα για επίλυση.</value>
|
||||||
@@ -2701,7 +2701,7 @@
|
|||||||
<value>Σύνδεση ως {0}</value>
|
<value>Σύνδεση ως {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
||||||
<value>Η ενέργεια στη λήξη χρόνου της κρύπτης άλλαξε σε αποσύνδεση</value>
|
<value>Η ενέργεια στη λήξη χρόνου του vault άλλαξε σε αποσύνδεση</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BlockAutoFill" xml:space="preserve">
|
<data name="BlockAutoFill" xml:space="preserve">
|
||||||
<value>Αποκλείστε την αυτόματη συμπλήρωση</value>
|
<value>Αποκλείστε την αυτόματη συμπλήρωση</value>
|
||||||
@@ -2759,7 +2759,7 @@
|
|||||||
<value>Σύνδεση στο</value>
|
<value>Σύνδεση στο</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Vault" xml:space="preserve">
|
<data name="Vault" xml:space="preserve">
|
||||||
<value>Κρύπτη</value>
|
<value>Vault</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Appearance" xml:space="preserve">
|
<data name="Appearance" xml:space="preserve">
|
||||||
<value>Εμφάνιση</value>
|
<value>Εμφάνιση</value>
|
||||||
@@ -2808,7 +2808,7 @@
|
|||||||
<value>{0} ώρες</value>
|
<value>{0} ώρες</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
||||||
<value>Χρησιμοποιήστε το Bitwarden για να αποθηκεύσετε τα νέα κλειδιά πρόσβασης και συνδεθείτε με τα κλειδιά πρόσβασης που είναι αποθηκευμένα στη κρύπτη σας.</value>
|
<value>Use Bitwarden to save new passkeys and log in with passkeys stored in your vault.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||||
<value>Το Android Autofill Framework χρησιμοποιείται για να προσφέρει αυτόματη συμπλήρωση στοιχείων σύνδεσης σε άλλες εφαρμογές στη συσκευή σας.</value>
|
<value>Το Android Autofill Framework χρησιμοποιείται για να προσφέρει αυτόματη συμπλήρωση στοιχείων σύνδεσης σε άλλες εφαρμογές στη συσκευή σας.</value>
|
||||||
@@ -2839,7 +2839,7 @@
|
|||||||
<value>Συνέχεια στο κατάστημα εφαρμογών;</value>
|
<value>Συνέχεια στο κατάστημα εφαρμογών;</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
||||||
<value>Συνέχεια στις Ρυθμίσεις συσκευής;</value>
|
<value>Continue to device Settings?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
||||||
<value>Κάντε τον λογαριασμό σας πιο ασφαλή με τη ρύθμιση δύο βημάτων σύνδεσης στην εφαρμογή διαδικτύου Bitwarden.</value>
|
<value>Κάντε τον λογαριασμό σας πιο ασφαλή με τη ρύθμιση δύο βημάτων σύνδεσης στην εφαρμογή διαδικτύου Bitwarden.</value>
|
||||||
@@ -2848,7 +2848,7 @@
|
|||||||
<value>Μπορείτε να αλλάξετε τον κύριο κωδικό πρόσβασης στην εφαρμογή διαδικτύου Bitwarden.</value>
|
<value>Μπορείτε να αλλάξετε τον κύριο κωδικό πρόσβασης στην εφαρμογή διαδικτύου Bitwarden.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YouCanImportDataToYourVaultOnX" xml:space="preserve">
|
<data name="YouCanImportDataToYourVaultOnX" xml:space="preserve">
|
||||||
<value>Μπορείτε να εισαγάγετε δεδομένα στη κρύπτη σας στο {0}.</value>
|
<value>Μπορείτε να εισαγάγετε δεδομένα στο vault σας στο {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">
|
||||||
@@ -2864,7 +2864,7 @@
|
|||||||
<value>Εξερευνήστε περισσότερες δυνατότητες του Bitwarden λογαριασμού σας, στην εφαρμογή διαδικτύου.</value>
|
<value>Εξερευνήστε περισσότερες δυνατότητες του Bitwarden λογαριασμού σας, στην εφαρμογή διαδικτύου.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
||||||
<value>Το Bitwarden σας επιτρέπει να μοιράζεστε τα στοιχεία της κρύπτης σας με άλλους, χρησιμοποιώντας έναν λογαριασμό οργανισμού. Μάθετε περισσότερα στην ιστοσελίδα bitwarden.com.</value>
|
<value>Το Bitwarden σας επιτρέπει να μοιράζεστε τα στοιχεία του vault σας με άλλους, χρησιμοποιώντας έναν λογαριασμό οργανισμού. Μάθετε περισσότερα στην ιστοσελίδα bitwarden.com.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RateAppDescriptionLong" xml:space="preserve">
|
<data name="RateAppDescriptionLong" xml:space="preserve">
|
||||||
<value>Βοηθήστε άλλους να μάθουν αν το Bitwarden είναι κατάλληλο για αυτούς. Επισκεφθείτε το κατάστημα εφαρμογών και αφήστε τώρα μια βαθμολογία.</value>
|
<value>Βοηθήστε άλλους να μάθουν αν το Bitwarden είναι κατάλληλο για αυτούς. Επισκεφθείτε το κατάστημα εφαρμογών και αφήστε τώρα μια βαθμολογία.</value>
|
||||||
@@ -2889,28 +2889,28 @@
|
|||||||
<value>Ο οργανισμός σας απαιτεί να ορίσετε έναν κύριο κωδικό πρόσβασης.</value>
|
<value>Ο οργανισμός σας απαιτεί να ορίσετε έναν κύριο κωδικό πρόσβασης.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
||||||
<value>Ρυθμίστε μια επιλογή κλειδώματος για να αλλάξετε την ενέργεια στη λήξη χρόνου της κρύπτης σας.</value>
|
<value>Ρυθμίστε μια επιλογή κλειδώματος για να αλλάξετε την ενέργεια στη λήξη χρόνου του vault σας.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||||
<value>Επιλέξτε μια σύνδεση στην οποία θα αποθηκεύσετε αυτό το κλειδί πρόσβασης</value>
|
<value>Choose a login to save this passkey to</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||||
<value>Αποθήκευση κλειδιού πρόσβασης ως νέα σύνδεση</value>
|
<value>Save passkey as new login</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SavePasskey" xml:space="preserve">
|
<data name="SavePasskey" xml:space="preserve">
|
||||||
<value>Αποθήκευση κλειδιού πρόσβασης</value>
|
<value>Save passkey</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeysForX" xml:space="preserve">
|
<data name="PasskeysForX" xml:space="preserve">
|
||||||
<value>Κλεισιά πρόσβασης για {0}</value>
|
<value>Passkeys for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordsForX" xml:space="preserve">
|
<data name="PasswordsForX" xml:space="preserve">
|
||||||
<value>Κωδικοί πρόσβασης για {0}</value>
|
<value>Passwords for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OverwritePasskey" xml:space="preserve">
|
<data name="OverwritePasskey" xml:space="preserve">
|
||||||
<value>Αντικατάσταση κλειδιού πρόσβασης;</value>
|
<value>Overwrite passkey?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
||||||
<value>Αυτό το στοιχείο περιέχει ήδη ένα κλειδί πρόσβασης. Είστε σίγουροι ότι θέλετε να αντικαταστήσετε το τρέχον κλειδί πρόσβασης;</value>
|
<value>This item already contains a passkey. Are you sure you want to overwrite the current passkey?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
||||||
<value>Duo σύνδεση δύο βημάτων απαιτείται για το λογαριασμό σας. </value>
|
<value>Duo σύνδεση δύο βημάτων απαιτείται για το λογαριασμό σας. </value>
|
||||||
@@ -2922,74 +2922,86 @@
|
|||||||
<value>Εκκίνηση Duo</value>
|
<value>Εκκίνηση Duo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationRequiredByX" xml:space="preserve">
|
<data name="VerificationRequiredByX" xml:space="preserve">
|
||||||
<value>Απαιτείται επαλήθευση από {0}</value>
|
<value>Verification required by {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationRequiredForThisActionSetUpAnUnlockMethodInBitwardenToContinue" xml:space="preserve">
|
<data name="VerificationRequiredForThisActionSetUpAnUnlockMethodInBitwardenToContinue" xml:space="preserve">
|
||||||
<value>Απαιτείται επαλήθευση για αυτήν την ενέργεια. Δημιουργήστε μια μέθοδο ξεκλειδώματος στο Bitwarden για να συνεχίσετε.</value>
|
<value>Verification required for this action. Set up an unlock method in Bitwarden to continue.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
||||||
<value>Σφάλμα δημιουργίας κλειδιού πρόσβασης</value>
|
<value>Error creating passkey</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ErrorReadingPasskey" xml:space="preserve">
|
<data name="ErrorReadingPasskey" xml:space="preserve">
|
||||||
<value>Σφάλμα ανάγνωσης κλειδιού πρόσβασης</value>
|
<value>Error reading passkey</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThereWasAProblemCreatingAPasskeyForXTryAgainLater" xml:space="preserve">
|
<data name="ThereWasAProblemCreatingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||||
<value>Υπήρξε ένα πρόβλημα κατά τη δημιουργία ενός κλειδιού πρόσβασης για το {0}. Δοκιμάστε ξανά αργότερα.</value>
|
<value>There was a problem creating a passkey for {0}. Try again later.</value>
|
||||||
<comment>The parameter is the RpId</comment>
|
<comment>The parameter is the RpId</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThereWasAProblemReadingAPasskeyForXTryAgainLater" xml:space="preserve">
|
<data name="ThereWasAProblemReadingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||||
<value>Υπήρξε ένα πρόβλημα κατά την ανάγνωση ενός κλειδιού πρόσβασης για {0}. Δοκιμάστε ξανά αργότερα.</value>
|
<value>There was a problem reading your passkey for {0}. Try again later.</value>
|
||||||
<comment>The parameter is the RpId</comment>
|
<comment>The parameter is the RpId</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||||
<value>Επαλήθευση ταυτότητας...</value>
|
<value>Verifying identity...</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Passwords" xml:space="preserve">
|
<data name="Passwords" xml:space="preserve">
|
||||||
<value>Κωδικοί</value>
|
<value>Passwords</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnknownAccount" xml:space="preserve">
|
<data name="UnknownAccount" xml:space="preserve">
|
||||||
<value>Άγνωστος λογαριασμός</value>
|
<value>Unknown account</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAutofill" xml:space="preserve">
|
<data name="SetUpAutofill" xml:space="preserve">
|
||||||
<value>Ρύθμιση αυτόματης συμπλήρωσης</value>
|
<value>Set up auto-fill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
||||||
<value>Αποκτήστε άμεση πρόσβαση στους κωδικούς και κλειδιά πρόσβασής σας!</value>
|
<value>Get instant access to your passwords and passkeys!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAutoFillDescriptionLong" xml:space="preserve">
|
<data name="SetUpAutoFillDescriptionLong" xml:space="preserve">
|
||||||
<value>Για να ρυθμίσετε την αυτόματη συμπλήρωση και τη διαχείριση κλειδιού πρόσβασης, ορίστε το Bitwarden ως τον προτιμώμενο πάροχο σας στις Ρυθμίσεις του iOS.</value>
|
<value>To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
<data name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
||||||
<value>1. Πηγαίνετε στις Ρυθμίσεις συσκευής > Κωδικοί Πρόσβασης > Επιλογές Κωδικού Πρόσβασης</value>
|
<value>1. Go to your device's Settings > Passwords > Password Options</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
||||||
<value>2. Ενεργοποιήστε την Αυτόματη Συμπλήρωση</value>
|
<value>2. Turn on AutoFill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
||||||
<value>3. Επιλέξτε "Bitwarden" για να χρησιμοποιήσετε για τους κωδικούς και τα κλειδιά πρόσβασης</value>
|
<value>3. Select "Bitwarden" to use for passwords and passkeys</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
||||||
<value>Το κλειδί πρόσβασής σας θα αποθηκευτεί στη κρύπτη του Bitwarden σας</value>
|
<value>Your passkey will be saved to your Bitwarden vault</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Το κλειδί πρόσβασής σας θα αποθηκευτεί στη κρύπτη του Bitwarden σας για το {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Δεν υποστηρίζονται κλειδιά πρόσβασης για αυτήν την εφαρμογή</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
||||||
<value>Αποτυχία λειτουργίας κλειδιού πρόσβασης επειδή ο περιηγητής δεν είναι προνομιούχος</value>
|
<value>Passkey operation failed because browser is not privileged</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
||||||
<value>Η λειτουργία κλειδιού πρόσβασης απέτυχε επειδή η υπογραφή του περιηγητή δεν ταιριάζει</value>
|
<value>Passkey operation failed because browser signature does not match</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
||||||
<value>Η λειτουργία κλειδιού πρόσβασης απέτυχε λόγω των ελλείποντων συνδέσμων στοιχείων</value>
|
<value>Passkey operation failed because of missing asset links</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseAppNotFoundInAssetLinks" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseAppNotFoundInAssetLinks" xml:space="preserve">
|
||||||
<value>Αποτυχία λειτουργίας κλειδιού πρόσβασης επειδή η εφαρμογή δεν βρέθηκε στους συνδέσμους στοιχείων</value>
|
<value>Passkey operation failed because app not found in asset links</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
||||||
<value>Αποτυχία λειτουργίας κλειδιού πρόσβασης επειδή δεν ήταν δυνατή η επαλήθευση της εφαρμογής</value>
|
<value>Passkey operation failed because app could not be verified</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2974,6 +2974,18 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organisation items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organisation items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys not supported for this app</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -1820,46 +1820,59 @@ Scanning will happen automatically.</value>
|
|||||||
<value>Privacy Policy</value>
|
<value>Privacy Policy</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDrawOverPermissionAlert" xml:space="preserve">
|
<data name="AccessibilityDrawOverPermissionAlert" xml:space="preserve">
|
||||||
<value>Bitwarden needs attention - Enable "Draw-Over" in "Auto-fill Services" from Bitwarden Settings</value>
|
<value>Bitwarden needs attention - Enable "Draw-Over" in "Auto-fill Services" from Bitwarden Settings
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyManagement" xml:space="preserve">
|
<data name="PasskeyManagement" xml:space="preserve">
|
||||||
<value>Passkey management</value>
|
<value>Passkey management</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServices" xml:space="preserve">
|
<data name="AutofillServices" xml:space="preserve">
|
||||||
<value>Auto-fill Services</value>
|
<value>Auto-fill Services
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InlineAutofill" xml:space="preserve">
|
<data name="InlineAutofill" xml:space="preserve">
|
||||||
<value>Use Inline Autofill</value>
|
<value>Use Inline Autofill
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InlineAutofillDescription" xml:space="preserve">
|
<data name="InlineAutofillDescription" xml:space="preserve">
|
||||||
<value>Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is disabled), the default Autofill overlay will be used.</value>
|
<value>Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is disabled), the default Autofill overlay will be used.
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Accessibility" xml:space="preserve">
|
<data name="Accessibility" xml:space="preserve">
|
||||||
<value>Use Accessibility</value>
|
<value>Use Accessibility
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDescription" xml:space="preserve">
|
<data name="AccessibilityDescription" xml:space="preserve">
|
||||||
<value>Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When enabled, we'll display a popup when login fields are selected.</value>
|
<value>Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When enabled, we'll display a popup when login fields are selected.
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDescription2" xml:space="preserve">
|
<data name="AccessibilityDescription2" xml:space="preserve">
|
||||||
<value>Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be enabled as well)</value>
|
<value>Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be enabled as well)
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDescription3" xml:space="preserve">
|
<data name="AccessibilityDescription3" xml:space="preserve">
|
||||||
<value>Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if enabled).</value>
|
<value>Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if enabled).
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDescription4" xml:space="preserve">
|
<data name="AccessibilityDescription4" xml:space="preserve">
|
||||||
<value>Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if enabled).</value>
|
<value>Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if enabled).
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DrawOver" xml:space="preserve">
|
<data name="DrawOver" xml:space="preserve">
|
||||||
<value>Use Draw-Over</value>
|
<value>Use Draw-Over
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DrawOverDescription" xml:space="preserve">
|
<data name="DrawOverDescription" xml:space="preserve">
|
||||||
<value>When enabled, allows the Bitwarden Accessibility Service to display a popup when login fields are selected.</value>
|
<value>When enabled, allows the Bitwarden Accessibility Service to display a popup when login fields are selected.
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DrawOverDescription2" xml:space="preserve">
|
<data name="DrawOverDescription2" xml:space="preserve">
|
||||||
<value>If enabled, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins.</value>
|
<value>If enabled, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins.
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DrawOverDescription3" xml:space="preserve">
|
<data name="DrawOverDescription3" xml:space="preserve">
|
||||||
<value>If enabled, accessibility will show a popup to augment the Autofill Service for older apps that don't support the Android Autofill Framework.</value>
|
<value>If enabled, accessibility will show a popup to augment the Autofill Service for older apps that don't support the Android Autofill Framework.
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PersonalOwnershipSubmitError" xml:space="preserve">
|
<data name="PersonalOwnershipSubmitError" xml:space="preserve">
|
||||||
<value>Due to an Enterprise Policy, you are restricted from saving items to your personal vault. Change the Ownership option to an organization and choose from available Collections.</value>
|
<value>Due to an Enterprise Policy, you are restricted from saving items to your personal vault. Change the Ownership option to an organization and choose from available Collections.</value>
|
||||||
@@ -2975,6 +2988,18 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organisation items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organisation items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys not supported for this app</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -2239,7 +2239,8 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>Mayúsculas (A a la Z)</value>
|
<value>Mayúsculas (A a la Z)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LowercaseAtoZ" xml:space="preserve">
|
<data name="LowercaseAtoZ" xml:space="preserve">
|
||||||
<value>Minúsculas (A a la Z)</value>
|
<value>Minúsculas (A a la Z)
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NumbersZeroToNine" xml:space="preserve">
|
<data name="NumbersZeroToNine" xml:space="preserve">
|
||||||
<value>Números (0 al 9)</value>
|
<value>Números (0 al 9)</value>
|
||||||
@@ -2975,6 +2976,18 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Tu clave de acceso se guardará en tu caja fuerte de Bitwarden para {0}</value>
|
<value>Tu clave de acceso se guardará en tu caja fuerte de Bitwarden para {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Los elementos de organización sin asignar ya no están visibles en la vista Todas las cajas fuertes y solo se puede acceder a ellos a través de la consola de administrador. Asigne estos elementos a una colección desde la Consola de Administrador para hacerlos visibles.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>El 16 de mayo de 2024, los elementos de organización no asignados ya no serán visibles en la vista Todas las cajas fuertes y solo serán accesibles a través de la Consola de Administrador. Asigna estos objetos a una colección desde la Consola de Administrador para hacerlos visibles.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Recuérdamelo más tarde</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Aviso</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Claves de acceso no soportadas para esta aplicación</value>
|
<value>Claves de acceso no soportadas para esta aplicación</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -282,7 +282,7 @@
|
|||||||
<value>Oled kindel, et soovid selle konto eemaldada?</value>
|
<value>Oled kindel, et soovid selle konto eemaldada?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountAlreadyAdded" xml:space="preserve">
|
<data name="AccountAlreadyAdded" xml:space="preserve">
|
||||||
<value>Konto on juba lisatud</value>
|
<value>Konto on juba lisatud </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SwitchToAlreadyAddedAccountConfirmation" xml:space="preserve">
|
<data name="SwitchToAlreadyAddedAccountConfirmation" xml:space="preserve">
|
||||||
<value>Kas soovid kohe vahetada? </value>
|
<value>Kas soovid kohe vahetada? </value>
|
||||||
@@ -422,7 +422,7 @@
|
|||||||
<value>Automaattäite teenus</value>
|
<value>Automaattäite teenus</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
||||||
<value>Määra Bitwarden enda pääsuvõtme pakkujana telefoni seadetes.</value>
|
<value>Set Bitwarden as your passkey provider in device settings.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||||
<value>Väldi ebamääraseid kirjamärke</value>
|
<value>Väldi ebamääraseid kirjamärke</value>
|
||||||
@@ -949,7 +949,7 @@ Skaneerimine toimub automaatselt.</value>
|
|||||||
<value>Seda funktsiooni ei saa enne krüpteerimise võtme uuendamist kasutada.</value>
|
<value>Seda funktsiooni ei saa enne krüpteerimise võtme uuendamist kasutada.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EncryptionKeyMigrationRequiredDescriptionLong" xml:space="preserve">
|
<data name="EncryptionKeyMigrationRequiredDescriptionLong" xml:space="preserve">
|
||||||
<value>Krüpteerimisvõtme ühendamine nõutud. Palun logi sisse läbi veebibrauseri, et uuendada enda krüpteerimisvõtit.</value>
|
<value>Encryption key migration required. Please login through the web vault to update your encryption key.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnMore" xml:space="preserve">
|
<data name="LearnMore" xml:space="preserve">
|
||||||
<value>Rohkem teavet</value>
|
<value>Rohkem teavet</value>
|
||||||
@@ -1195,7 +1195,7 @@ Skaneerimine toimub automaatselt.</value>
|
|||||||
<value>Windows Hello</value>
|
<value>Windows Hello</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
||||||
<value>Meil ei õnnestunud automaatselt avada sulle Androidi paroolihalduri seadete menüü. Sa saad minna sinna manuaalselt läbi Androidi seadete > Süsteem > Paroolid & kontod > Paroolid, pääsuvõtmed ja andmeteenused.</value>
|
<value>We were unable to automatically open the Android credential provider settings menu for you. You can navigate to the credential provider settings menu manually from Android Settings > System > Passwords & accounts > Passwords, passkeys and data services.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||||
<value>Meil ei õnnestu Androidi sisestusabi seadeid avada. Võid selle ise avada, navigeerides Seaded > Süsteem > Keeled ja sisend > Täpsemad > Sisestusabi.</value>
|
<value>Meil ei õnnestu Androidi sisestusabi seadeid avada. Võid selle ise avada, navigeerides Seaded > Süsteem > Keeled ja sisend > Täpsemad > Sisestusabi.</value>
|
||||||
@@ -1460,11 +1460,11 @@ Skaneerimine toimub automaatselt.</value>
|
|||||||
<value>Puuduvad kaustad, mida kuvada.</value>
|
<value>Puuduvad kaustad, mida kuvada.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FingerprintPhrase" xml:space="preserve">
|
<data name="FingerprintPhrase" xml:space="preserve">
|
||||||
<value>Unikaalne sõnajada</value>
|
<value>Sõrmejälje fraas</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="YourAccountsFingerprint" xml:space="preserve">
|
<data name="YourAccountsFingerprint" xml:space="preserve">
|
||||||
<value>Konto unikaalne sõnajada</value>
|
<value>Konto sõrmejälje fraas</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="LearnOrgConfirmation" xml:space="preserve">
|
<data name="LearnOrgConfirmation" xml:space="preserve">
|
||||||
@@ -1822,7 +1822,7 @@ Skaneerimine toimub automaatselt.</value>
|
|||||||
<value>Bitwarden vajab tähelepanu! Vaata Bitwardeni menüüd Seaded -> Automaattäite teenused ning luba valik „Kuva peal“</value>
|
<value>Bitwarden vajab tähelepanu! Vaata Bitwardeni menüüd Seaded -> Automaattäite teenused ning luba valik „Kuva peal“</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyManagement" xml:space="preserve">
|
<data name="PasskeyManagement" xml:space="preserve">
|
||||||
<value>Pääsuvõtme haldamine</value>
|
<value>Passkey management</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServices" xml:space="preserve">
|
<data name="AutofillServices" xml:space="preserve">
|
||||||
<value>Automaattäite teenused</value>
|
<value>Automaattäite teenused</value>
|
||||||
@@ -2471,10 +2471,10 @@ Skaneerimine toimub automaatselt.</value>
|
|||||||
<value>Ühenda kellaga</value>
|
<value>Ühenda kellaga</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityServiceDisclosure" xml:space="preserve">
|
<data name="AccessibilityServiceDisclosure" xml:space="preserve">
|
||||||
<value>Juurdepääsetavuse Teenuse Teavitus</value>
|
<value>Accessibility Service Disclosure</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDisclosureText" xml:space="preserve">
|
<data name="AccessibilityDisclosureText" xml:space="preserve">
|
||||||
<value>Bitwarden kasutab Juurdepääsetavuse Teenust, et otsida sisselogimisväljasid rakendustes ja veebilehtedel, ning määrata neile vastavad ID-d, et täita lahtrid soovi korral kasutajanime ja parooliga. Me ei hoiusta teie andmeid, ega proovi kontrollida ühtegi elementi ekraanil peale sisselogimisväljade.</value>
|
<value>Bitwarden uses the Accessibility Service to search for login fields in apps and websites, then establish the appropriate field IDs for entering a username & password when a match for the app or site is found. We do not store any of the information presented to us by the service, nor do we make any attempt to control any on-screen elements beyond text entry of credentials.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Accept" xml:space="preserve">
|
<data name="Accept" xml:space="preserve">
|
||||||
<value>Nõustu</value>
|
<value>Nõustu</value>
|
||||||
@@ -2515,7 +2515,7 @@ Soovid selle konto peale lülituda?</value>
|
|||||||
<value>Sinu seadmesse saadeti teavitus.</value>
|
<value>Sinu seadmesse saadeti teavitus.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
|
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
|
||||||
<value>Veendu, et hoidla on lahti lukustatud ja unikaalne sõnajada ühtib teiste seadmetega.</value>
|
<value>Veendu, et hoidla on lahti lukustatud ja sõrmejälje fraasid seadmete vahel ühtivad.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ResendNotification" xml:space="preserve">
|
<data name="ResendNotification" xml:space="preserve">
|
||||||
<value>Saada märguanne uuesti</value>
|
<value>Saada märguanne uuesti</value>
|
||||||
@@ -2632,22 +2632,22 @@ Soovid selle konto peale lülituda?</value>
|
|||||||
<value>Praegune ülemparool</value>
|
<value>Praegune ülemparool</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggedIn" xml:space="preserve">
|
<data name="LoggedIn" xml:space="preserve">
|
||||||
<value>Sisse logitud!</value>
|
<value>Logged in!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
|
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
|
||||||
<value>Kinnita teises seadmes</value>
|
<value>Approve with my other device</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RequestAdminApproval" xml:space="preserve">
|
<data name="RequestAdminApproval" xml:space="preserve">
|
||||||
<value>Küsi administraatori nõusolekut</value>
|
<value>Request admin approval</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ApproveWithMasterPassword" xml:space="preserve">
|
<data name="ApproveWithMasterPassword" xml:space="preserve">
|
||||||
<value>Kinnita ülemparooliga</value>
|
<value>Approve with master password</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
|
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
|
||||||
<value>Lülita see välja, kui oled avalikus seadmes</value>
|
<value>Turn off using a public device</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RememberThisDevice" xml:space="preserve">
|
<data name="RememberThisDevice" xml:space="preserve">
|
||||||
<value>Hoia see seade meeles</value>
|
<value>Remember this device</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Passkey" xml:space="preserve">
|
<data name="Passkey" xml:space="preserve">
|
||||||
<value>Pääsukood</value>
|
<value>Pääsukood</value>
|
||||||
@@ -2674,10 +2674,10 @@ Soovid selle konto peale lülituda?</value>
|
|||||||
<value>Saadaval kaheastmelise kinnitamise jaoks</value>
|
<value>Saadaval kaheastmelise kinnitamise jaoks</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
<value>Abi ülemparooli uuesti küsimisega</value>
|
<value>Master password re-prompt help</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
<value>Avamine võis ebapiisava mälu tõttu nurjuda. Probleemi lahendamiseks vähenda oma KDF mälu seadeid või seadista biomeetriaga sisse logimine.</value>
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InvalidAPIKey" xml:space="preserve">
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
<value>Vigane API võti</value>
|
<value>Vigane API võti</value>
|
||||||
@@ -2686,22 +2686,22 @@ Soovid selle konto peale lülituda?</value>
|
|||||||
<value>Vigane API token</value>
|
<value>Vigane API token</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AdminApprovalRequested" xml:space="preserve">
|
<data name="AdminApprovalRequested" xml:space="preserve">
|
||||||
<value>Taotlus administraatorile saadetud</value>
|
<value>Admin approval requested</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
|
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
|
||||||
<value>Sinu taotlus saadeti administraatorile.</value>
|
<value>Your request has been sent to your admin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
|
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
|
||||||
<value>Kinnitamise järel saad selle kohta teavituse. </value>
|
<value>You will be notified once approved. </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TroubleLoggingIn" xml:space="preserve">
|
<data name="TroubleLoggingIn" xml:space="preserve">
|
||||||
<value>Ei õnnestu sisse logida?</value>
|
<value>Trouble logging in?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsX" xml:space="preserve">
|
||||||
<value>Login sisse kui {0}</value>
|
<value>Logging in as {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
||||||
<value>Hoidla ajalõpu saabudes logitakse sind välja</value>
|
<value>Vault timeout action changed to log out</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BlockAutoFill" xml:space="preserve">
|
<data name="BlockAutoFill" xml:space="preserve">
|
||||||
<value>Automaatse täitmise keelamine</value>
|
<value>Automaatse täitmise keelamine</value>
|
||||||
@@ -2747,13 +2747,13 @@ Soovid selle konto peale lülituda?</value>
|
|||||||
<value>Mitme URI korraga muutmine ei toiminud</value>
|
<value>Mitme URI korraga muutmine ei toiminud</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoginApproved" xml:space="preserve">
|
<data name="LoginApproved" xml:space="preserve">
|
||||||
<value>Sisselogimine kinnitatud</value>
|
<value>Login approved</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
|
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
|
||||||
<value>Bitwardeni rakenduse seadetes peab olema konfigureeritud sisselogimine läbi seadme. Soovid muud valikut?</value>
|
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInWithDevice" xml:space="preserve">
|
<data name="LogInWithDevice" xml:space="preserve">
|
||||||
<value>Logi sisse teise seadmega</value>
|
<value>Log in with device</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInOn" xml:space="preserve">
|
<data name="LoggingInOn" xml:space="preserve">
|
||||||
<value>Sisselogimas kui</value>
|
<value>Sisselogimas kui</value>
|
||||||
@@ -2780,216 +2780,228 @@ Soovid selle konto peale lülituda?</value>
|
|||||||
<value>Sünkroniseeri kohe</value>
|
<value>Sünkroniseeri kohe</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnlockOptions" xml:space="preserve">
|
<data name="UnlockOptions" xml:space="preserve">
|
||||||
<value>Avamise valikud</value>
|
<value>Unlock options</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SessionTimeout" xml:space="preserve">
|
<data name="SessionTimeout" xml:space="preserve">
|
||||||
<value>Sessiooni ajalõpp</value>
|
<value>Sessiooni ajalõpp</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SessionTimeoutAction" xml:space="preserve">
|
<data name="SessionTimeoutAction" xml:space="preserve">
|
||||||
<value>Ajalõpule järgnev tegevus</value>
|
<value>Session timeout action</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountFingerprintPhrase" xml:space="preserve">
|
<data name="AccountFingerprintPhrase" xml:space="preserve">
|
||||||
<value>Konto unikaalne sõnajada</value>
|
<value>Account fingerprint phrase</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>Üks tund ja üks minut</value>
|
<value>One hour and one minute</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OneHourAndXMinute" xml:space="preserve">
|
<data name="OneHourAndXMinute" xml:space="preserve">
|
||||||
<value>Üks tund ja {0} minutit</value>
|
<value>One hour and {0} minutes</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="XHoursAndOneMinute" xml:space="preserve">
|
<data name="XHoursAndOneMinute" xml:space="preserve">
|
||||||
<value>{0} tundi ja üks minut</value>
|
<value>{0} hours and one minute</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="XHoursAndYMinutes" xml:space="preserve">
|
<data name="XHoursAndYMinutes" xml:space="preserve">
|
||||||
<value>{0} tundi ja {1} minutit</value>
|
<value>{0} hours and {1} minutes</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="XHours" xml:space="preserve">
|
<data name="XHours" xml:space="preserve">
|
||||||
<value>{0} tundi</value>
|
<value>{0} hours</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
||||||
<value>Kasuta Bitwardenit uute pääsuvõtmete salvestamiseks hoidlas ja nendega sisse logimiseks.</value>
|
<value>Use Bitwarden to save new passkeys and log in with passkeys stored in your vault.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||||
<value>Android Autofill Raamistiku kasutatakse teistesse rakendustesse sisselogimisel andmete automaatse täitmise lihtsustamiseks.</value>
|
<value>The Android Autofill Framework is used to assist in filling login information into other apps on your device.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseInlineAutofillExplanationLong" xml:space="preserve">
|
<data name="UseInlineAutofillExplanationLong" xml:space="preserve">
|
||||||
<value>Kasuta automaatset täitmist hüpikuna veebisaidi sees, kui su klaviatuur lubab seda. Muidu kasuta vaikeseadet.</value>
|
<value>Use inline autofill if your selected keyboard supports it. Otherwise, use the default overlay.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AdditionalOptions" xml:space="preserve">
|
<data name="AdditionalOptions" xml:space="preserve">
|
||||||
<value>Muud valikud</value>
|
<value>Additional options</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToWebApp" xml:space="preserve">
|
<data name="ContinueToWebApp" xml:space="preserve">
|
||||||
<value>Jätka veebibrauseris?</value>
|
<value>Continue to web app?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToX" xml:space="preserve">
|
<data name="ContinueToX" xml:space="preserve">
|
||||||
<value>Ava {0}?</value>
|
<value>Continue to {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>Ava Abikeskus?</value>
|
<value>Continue to Help center?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToContactSupport" xml:space="preserve">
|
<data name="ContinueToContactSupport" xml:space="preserve">
|
||||||
<value>Kas soovid avada klienditoe vormi?</value>
|
<value>Continue to contact support?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToPrivacyPolicy" xml:space="preserve">
|
<data name="ContinueToPrivacyPolicy" xml:space="preserve">
|
||||||
<value>Ava privaatsuspoliitika?</value>
|
<value>Continue to privacy policy?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToAppStore" xml:space="preserve">
|
<data name="ContinueToAppStore" xml:space="preserve">
|
||||||
<value>Kas soovid avada enda rakenduste poe?</value>
|
<value>Continue to app store?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
||||||
<value>Ava Seaded?</value>
|
<value>Continue to device Settings?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
||||||
<value>Muuda oma konto turvalisemaks seadistades brauseris kahe-astmeline sisselogimine.</value>
|
<value>Make your account more secure by setting up two-step login in the Bitwarden web app.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeMasterPasswordDescriptionLong" xml:space="preserve">
|
<data name="ChangeMasterPasswordDescriptionLong" xml:space="preserve">
|
||||||
<value>Ülemparooli saab muuta brauseris.</value>
|
<value>You can change your master password on the Bitwarden web app.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YouCanImportDataToYourVaultOnX" xml:space="preserve">
|
<data name="YouCanImportDataToYourVaultOnX" xml:space="preserve">
|
||||||
<value>Sa saad importida oma andmed hoidlasse aadressil {0}.</value>
|
<value>You can import data to your vault on {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>Uuri lähemalt Abikeskusest kuidas kasutada Bitwardenit.</value>
|
<value>Learn more about how to use Bitwarden on the Help center.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactSupportDescriptionLong" xml:space="preserve">
|
<data name="ContactSupportDescriptionLong" xml:space="preserve">
|
||||||
<value>Ei leidnud otsitavat? Kirjuta Bitwardeni toele veebilehel bitwarden.com.</value>
|
<value>Can’t find what you are looking for? Reach out to Bitwarden support on bitwarden.com.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PrivacyPolicyDescriptionLong" xml:space="preserve">
|
<data name="PrivacyPolicyDescriptionLong" xml:space="preserve">
|
||||||
<value>Vaadake meie privaatsuspoliitikat veebilehel bitwarden.com.</value>
|
<value>Check out our privacy policy on bitwarden.com.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExploreMoreFeaturesOfYourBitwardenAccountOnTheWebApp" xml:space="preserve">
|
<data name="ExploreMoreFeaturesOfYourBitwardenAccountOnTheWebApp" xml:space="preserve">
|
||||||
<value>Vaata ka teisi Bitwardeni konto funktsioone veebibrauseris.</value>
|
<value>Explore more features of your Bitwarden account on the web app.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
||||||
<value>Bitwarden võimaldab sul hoidla sisu teiste kasutajatega jagada, kasutades selleks organisatsiooni kontot. Uuri lähemalt www.bitwarden.com.</value>
|
<value>Bitwarden allows you to share your vault items with others by using an organization. Learn more on the bitwarden.com website.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RateAppDescriptionLong" xml:space="preserve">
|
<data name="RateAppDescriptionLong" xml:space="preserve">
|
||||||
<value>Aita meil jõuda rohkemate inimesteni. Külasta enda rakenduste poodi ja jäta sinna positiivne hinnang.</value>
|
<value>Help others find out if Bitwarden is right for them. Visit the app store and leave a rating now.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DefaultDarkThemeDescriptionLong" xml:space="preserve">
|
<data name="DefaultDarkThemeDescriptionLong" xml:space="preserve">
|
||||||
<value>Kasuta tumedat teemat, kui sa kasutad seda ka enda telefoni seadetes</value>
|
<value>Choose the dark theme to use when your device’s dark mode is in use</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CreatedXY" xml:space="preserve">
|
<data name="CreatedXY" xml:space="preserve">
|
||||||
<value>Loodud {0}, {1}</value>
|
<value>Created {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>Liiga palju katseid</value>
|
<value>Too many attempts</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountLoggedOutBiometricExceeded" xml:space="preserve">
|
<data name="AccountLoggedOutBiometricExceeded" xml:space="preserve">
|
||||||
<value>Edukalt välja logitud.</value>
|
<value>Account logged out.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourOrganizationPermissionsWereUpdatedRequeringYouToSetAMasterPassword" xml:space="preserve">
|
<data name="YourOrganizationPermissionsWereUpdatedRequeringYouToSetAMasterPassword" xml:space="preserve">
|
||||||
<value>Teie organisatsiooni seadeid värskendati, mistõttu peate määrama ülemparooli.</value>
|
<value>Your organization permissions were updated, requiring you to set a master password.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourOrganizationRequiresYouToSetAMasterPassword" xml:space="preserve">
|
<data name="YourOrganizationRequiresYouToSetAMasterPassword" xml:space="preserve">
|
||||||
<value>Sinu organisatsioon nõuab sult ülemparooli seadistamist.</value>
|
<value>Your organization requires you to set a master password.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
||||||
<value>Hoidla ajalõpu muutmiseks vali esmalt lahtilukustamise meetod.</value>
|
<value>Set up an unlock option to change your vault timeout action.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||||
<value>Val millisesse kirjesse soovid selle pääsuvõtme salvestada</value>
|
<value>Choose a login to save this passkey to</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||||
<value>Salvesta pääsuvõti uude kirjesse</value>
|
<value>Save passkey as new login</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SavePasskey" xml:space="preserve">
|
<data name="SavePasskey" xml:space="preserve">
|
||||||
<value>Salvesta pääsuvõti</value>
|
<value>Save passkey</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeysForX" xml:space="preserve">
|
<data name="PasskeysForX" xml:space="preserve">
|
||||||
<value>Kasutaja {0} pääsuvõtmed</value>
|
<value>Passkeys for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordsForX" xml:space="preserve">
|
<data name="PasswordsForX" xml:space="preserve">
|
||||||
<value>Kasutaja {0} paroolid</value>
|
<value>Passwords for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OverwritePasskey" xml:space="preserve">
|
<data name="OverwritePasskey" xml:space="preserve">
|
||||||
<value>Kas soovid pääsuvõtme üle kirjutada?</value>
|
<value>Overwrite passkey?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
||||||
<value>See kirje sisaldab juba pääsuvõtit. Kas oled kindel, et soovid selle üle kirjutada?</value>
|
<value>This item already contains a passkey. Are you sure you want to overwrite the current passkey?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
||||||
<value>Duo kahe-astmeline sisselogimine on nõutud sinu kontol. </value>
|
<value>Duo two-step login is required for your account. </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FollowTheStepsFromDuoToFinishLoggingIn" xml:space="preserve">
|
<data name="FollowTheStepsFromDuoToFinishLoggingIn" xml:space="preserve">
|
||||||
<value>Sisselogimise lõpetamiseks järgige Duo juhiseid.</value>
|
<value>Follow the steps from Duo to finish logging in.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LaunchDuo" xml:space="preserve">
|
<data name="LaunchDuo" xml:space="preserve">
|
||||||
<value>Käivita Duo</value>
|
<value>Launch Duo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationRequiredByX" xml:space="preserve">
|
<data name="VerificationRequiredByX" xml:space="preserve">
|
||||||
<value>{0} nõuab kinnitamist</value>
|
<value>Verification required by {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationRequiredForThisActionSetUpAnUnlockMethodInBitwardenToContinue" xml:space="preserve">
|
<data name="VerificationRequiredForThisActionSetUpAnUnlockMethodInBitwardenToContinue" xml:space="preserve">
|
||||||
<value>Kinnitamine on nõutud selle tegevuse jaoks. Seadista jätkamiseks lahtilukustamise meetod Bitwardenis.</value>
|
<value>Verification required for this action. Set up an unlock method in Bitwarden to continue.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
||||||
<value>Pääsuvõtme loomine ebaõnnestus</value>
|
<value>Error creating passkey</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ErrorReadingPasskey" xml:space="preserve">
|
<data name="ErrorReadingPasskey" xml:space="preserve">
|
||||||
<value>Pääsuvõtme lugemine ebaõnnestus</value>
|
<value>Error reading passkey</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThereWasAProblemCreatingAPasskeyForXTryAgainLater" xml:space="preserve">
|
<data name="ThereWasAProblemCreatingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||||
<value>Ei õnnestunud luua pääsuvõtit {0}. Proovi hiljem uuesti.</value>
|
<value>There was a problem creating a passkey for {0}. Try again later.</value>
|
||||||
<comment>The parameter is the RpId</comment>
|
<comment>The parameter is the RpId</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThereWasAProblemReadingAPasskeyForXTryAgainLater" xml:space="preserve">
|
<data name="ThereWasAProblemReadingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||||
<value>Ei õnnestunud lugeda pääsuvõtit {0}. Proovi hiljem uuesti.</value>
|
<value>There was a problem reading your passkey for {0}. Try again later.</value>
|
||||||
<comment>The parameter is the RpId</comment>
|
<comment>The parameter is the RpId</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||||
<value>Kinnitan sinu isikut...</value>
|
<value>Verifying identity...</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Passwords" xml:space="preserve">
|
<data name="Passwords" xml:space="preserve">
|
||||||
<value>Paroolid</value>
|
<value>Passwords</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnknownAccount" xml:space="preserve">
|
<data name="UnknownAccount" xml:space="preserve">
|
||||||
<value>Tundmatu konto</value>
|
<value>Unknown account</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAutofill" xml:space="preserve">
|
<data name="SetUpAutofill" xml:space="preserve">
|
||||||
<value>Seadista automaatne täitmine</value>
|
<value>Set up auto-fill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
||||||
<value>Hangi kohene juurdepääs enda paroolidele ja pääsuvõtmetele!</value>
|
<value>Get instant access to your passwords and passkeys!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAutoFillDescriptionLong" xml:space="preserve">
|
<data name="SetUpAutoFillDescriptionLong" xml:space="preserve">
|
||||||
<value>Paroolide automaatse täitmise ja pääsuvõtmete haldamise seadistamiseks, määra Bitwarden enda eelistatud pakkujana iOS-i seadetes.</value>
|
<value>To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
<data name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
||||||
<value>1. Ava Seaded > Paroolid > Paroolide Valikud</value>
|
<value>1. Go to your device's Settings > Passwords > Password Options</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
||||||
<value>2. Lülita AutoFill sisse</value>
|
<value>2. Turn on AutoFill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
||||||
<value>3. Vali "Bitwarden", keda kasutada paroolide ja pääsuvõtmete jaoks</value>
|
<value>3. Select "Bitwarden" to use for passwords and passkeys</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
||||||
<value>Sinu pääsuvõti salvestatakse sinu Bitwardeni hoidlasse</value>
|
<value>Your passkey will be saved to your Bitwarden vault</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Sinu pääsuvõti salvestatakse sinu Bitwardeni hoidlasse kirjesse {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>See rakendus ei toeta pääsuvõtmeid</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
||||||
<value>Pääsuvõtme funktsiooni kasutamine ebaõnnestus, sest see brauser ei ole toetatud</value>
|
<value>Passkey operation failed because browser is not privileged</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
||||||
<value>Pääsuvõtme funktsiooni kasutamine ebaõnnestus, sest brauseri sõrmejälg ei ühti</value>
|
<value>Passkey operation failed because browser signature does not match</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
||||||
<value>Pääsuvõtme funktsiooni kasutamine ebaõnnestus, sest puuduvad vajalikud lingid (missing asset links)</value>
|
<value>Passkey operation failed because of missing asset links</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseAppNotFoundInAssetLinks" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseAppNotFoundInAssetLinks" xml:space="preserve">
|
||||||
<value>Pääsuvõtme funktsiooni kasutamine ebaõnnestus, sest rakendust ei leitud linkidest (app not found in asset links)</value>
|
<value>Passkey operation failed because app not found in asset links</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
||||||
<value>Pääsuvõtme funktsiooni kasutamine ebaõnnestus, sest rakenduse tuvastamine ebaõnnestus</value>
|
<value>Passkey operation failed because app could not be verified</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2767,7 +2767,7 @@ Kontu honetara aldatu nahi duzu?</value>
|
|||||||
<value>Account security</value>
|
<value>Account security</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||||
<value>Bitwarden help center</value>
|
<value>Bitwarden Help Center</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||||
<value>Contact Bitwarden support</value>
|
<value>Contact Bitwarden support</value>
|
||||||
@@ -2973,6 +2973,18 @@ Kontu honetara aldatu nahi duzu?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys not supported for this app</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -2975,6 +2975,18 @@
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>بعدا یادآوری کن</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>توجه</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys not supported for this app</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -422,7 +422,7 @@
|
|||||||
<value>Automaattitäytön palvelu</value>
|
<value>Automaattitäytön palvelu</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
||||||
<value>Aseta Bitwarden laitteesi asetuksista sen oletusarvoiseksi pääsyavainratkaisuksi.</value>
|
<value>Aseta Bitwarden laitteesi asetuksista sen oletusarvoiseksi suojausavainpalveluksi.</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>
|
||||||
@@ -556,7 +556,7 @@
|
|||||||
<value>Holvin aikakatkaisutoiminto</value>
|
<value>Holvin aikakatkaisutoiminto</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
||||||
<value>Uloskirjautuminen estää pääsyn holviisi ja vaatii ajan umpeuduttua tunnistautumisen Internet-yhteyden välityksellä. Haluatko varmasti käyttää asetusta?</value>
|
<value>Uloskirjautuminen estää pääsyn holviisi ja vaatii ajan umpeuduttua todennuksen Internet-yhteyden välityksellä. Haluatko varmasti käyttää asetusta?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingIn" xml:space="preserve">
|
<data name="LoggingIn" xml:space="preserve">
|
||||||
<value>Kirjaudutaan sisään…</value>
|
<value>Kirjaudutaan sisään…</value>
|
||||||
@@ -813,11 +813,11 @@
|
|||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnterVerificationCodeApp" xml:space="preserve">
|
<data name="EnterVerificationCodeApp" xml:space="preserve">
|
||||||
<value>Syötä todennussovelluksesi näyttämä kuusinumeroinen todennuskoodi.</value>
|
<value>Syötä 6-numeroinen todennuskoodi todennussovelluksestasi.</value>
|
||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnterVerificationCodeEmail" xml:space="preserve">
|
<data name="EnterVerificationCodeEmail" xml:space="preserve">
|
||||||
<value>Syötä osoitteeseen {0} lähetetty kuusinumeroinen todennuskoodi.</value>
|
<value>Syötä 6-numeroinen todennuskoodi, joka lähetettiin sähköpostitse osoitteeseen {0}.</value>
|
||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoginUnavailable" xml:space="preserve">
|
<data name="LoginUnavailable" xml:space="preserve">
|
||||||
@@ -843,7 +843,7 @@
|
|||||||
<value>Kaksivaiheisen kirjautumisen asetukset</value>
|
<value>Kaksivaiheisen kirjautumisen asetukset</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseAnotherTwoStepMethod" xml:space="preserve">
|
<data name="UseAnotherTwoStepMethod" xml:space="preserve">
|
||||||
<value>Käytä vaihtoehtoista todennustapaa</value>
|
<value>Käytä eri kaksivaiheisen kirjautumisen todennusmenetelmää</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationEmailNotSent" xml:space="preserve">
|
<data name="VerificationEmailNotSent" xml:space="preserve">
|
||||||
<value>Todennussähköpostin lähetys ei onnistunut. Yritä uudelleen.</value>
|
<value>Todennussähköpostin lähetys ei onnistunut. Yritä uudelleen.</value>
|
||||||
@@ -857,7 +857,7 @@
|
|||||||
<value>Jatka asettamalla YubiKey NEO -todennuslaite laitteen taustaa vasten tai kytke YubiKey-todennuslaite laitteen USB-porttiin ja paina sen painiketta.</value>
|
<value>Jatka asettamalla YubiKey NEO -todennuslaite laitteen taustaa vasten tai kytke YubiKey-todennuslaite laitteen USB-porttiin ja paina sen painiketta.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YubiKeyTitle" xml:space="preserve">
|
<data name="YubiKeyTitle" xml:space="preserve">
|
||||||
<value>YubiKey-suojausavain</value>
|
<value>YubiKey-todennuslaite</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">
|
||||||
@@ -907,13 +907,13 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Kuvat</value>
|
<value>Kuvat</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyTotp" xml:space="preserve">
|
<data name="CopyTotp" xml:space="preserve">
|
||||||
<value>Kopioi TOTP-koodi</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 kirjautumisen todennusavaimen, kopioidaan TOTP-koodi leikepöydälle kohteen automaattisen täytön yhteydessä.</value>
|
<value>Jos kirjautumistieto sisältää kaksivaiheisen todennuksen avaimen, kopioidaan TOTP-todennuskoodi leikepöydälle kohteen automaattisen täytön yhteydessä.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyTotpAutomatically" xml:space="preserve">
|
<data name="CopyTotpAutomatically" xml:space="preserve">
|
||||||
<value>Kopioi TOTP-koodi automaattisesti</value>
|
<value>TOTP-koodin kopiointi</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PremiumRequired" xml:space="preserve">
|
<data name="PremiumRequired" xml:space="preserve">
|
||||||
<value>Käyttääksesi tätä toimintoa tarvitset Premium-jäsenyyden.</value>
|
<value>Käyttääksesi tätä toimintoa tarvitset Premium-jäsenyyden.</value>
|
||||||
@@ -1134,7 +1134,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Osoite</value>
|
<value>Osoite</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Expiration" xml:space="preserve">
|
<data name="Expiration" xml:space="preserve">
|
||||||
<value>Voimassaolo päättyy</value>
|
<value>Erääntymisaika</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ShowWebsiteIcons" xml:space="preserve">
|
<data name="ShowWebsiteIcons" xml:space="preserve">
|
||||||
<value>Näytä sivustokuvakkeet</value>
|
<value>Näytä sivustokuvakkeet</value>
|
||||||
@@ -1195,7 +1195,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Windows Hello</value>
|
<value>Windows Hello</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
||||||
<value>Androidin automaattisen täytön asetuksia ei voitu avata automaattisesti. Voit avata asetukset myös itse etsimällä laitteen järjestelmäasetuksista salasanojen ja todentamisavainten/avainkoodien/pääsyavainten ja/tai automaattisen täytön palvelun asetukset (valinnoissa on laitekohtaisia eroja).</value>
|
<value>Androidin automaattisen täytön asetuksia ei voitu avata automaattisesti. Voit avata asetukset myös itse etsimällä laitteen asetuksista salasanojen ja todentamisavainten/avainkoodien ja/tai automaattisen täytön palvelun asetukset (valinnoissa on laitekohtaisia eroja).</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||||
<value>Androidin automaattisen täytön asetuksia ei voitu avata automaattisesti. Voit avata asetukset itse seuraavasti: "Asetukset" > "Järjestelmä" > "Kielet ja syöttötapa" > "Lisäasetukset" > "Automaattinen täyttö -palvelu".</value>
|
<value>Androidin automaattisen täytön asetuksia ei voitu avata automaattisesti. Voit avata asetukset itse seuraavasti: "Asetukset" > "Järjestelmä" > "Kielet ja syöttötapa" > "Lisäasetukset" > "Automaattinen täyttö -palvelu".</value>
|
||||||
@@ -1496,13 +1496,13 @@ Koodi skannataan automaattisesti.</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>Holvisi on lukittu. Jatka vahvistamalla pääsalasanasi.</value>
|
<value>Holvi on lukittu. Jatka vahvistamalla pääsalasanasi.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultLockedPIN" xml:space="preserve">
|
<data name="VaultLockedPIN" xml:space="preserve">
|
||||||
<value>Holvisi on lukittu. Jatka vahvistamalla PIN-koodisi.</value>
|
<value>Holvi on lukittu. Jatka vahvistamalla PIN-koodisi.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultLockedIdentity" xml:space="preserve">
|
<data name="VaultLockedIdentity" xml:space="preserve">
|
||||||
<value>Holvisi on lukittu. Jatka vahvistamalla henkilöllisyytesi.</value>
|
<value>Holvi on lukittu. Jatka vahvistamalla henkilöllisyytesi.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Dark" xml:space="preserve">
|
<data name="Dark" xml:space="preserve">
|
||||||
<value>Tumma</value>
|
<value>Tumma</value>
|
||||||
@@ -1592,7 +1592,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>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 asetuksista.</value>
|
<value>Automaattisen tä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>
|
||||||
@@ -1823,7 +1823,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Bitwarden edellyttää toimenpiteitä - Kytke "Näkyminen muiden päällä" -asetus käyttöön Bitwardenin asetusten kohdasta "Automaattitä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="PasskeyManagement" xml:space="preserve">
|
<data name="PasskeyManagement" xml:space="preserve">
|
||||||
<value>Pääsyavainhallinta</value>
|
<value>Suojausavainhallinta</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServices" xml:space="preserve">
|
<data name="AutofillServices" xml:space="preserve">
|
||||||
<value>Automaattitäytön palvelut</value>
|
<value>Automaattitäytön palvelut</value>
|
||||||
@@ -1931,7 +1931,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Erääntymispäivä</value>
|
<value>Erääntymispäivä</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExpirationTime" xml:space="preserve">
|
<data name="ExpirationTime" xml:space="preserve">
|
||||||
<value>Voimassaolo päättyy</value>
|
<value>Erääntymisaika</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExpirationDateInfo" xml:space="preserve">
|
<data name="ExpirationDateInfo" xml:space="preserve">
|
||||||
<value>Send erääntyy määritettynä ajankohtana.</value>
|
<value>Send erääntyy määritettynä ajankohtana.</value>
|
||||||
@@ -2120,10 +2120,10 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>FIDO2 WebAuthn</value>
|
<value>FIDO2 WebAuthn</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Fido2Instruction" xml:space="preserve">
|
<data name="Fido2Instruction" xml:space="preserve">
|
||||||
<value>Jatka valmistelemalla FIDO2 WebAuthn -suojausavaimesi ja seuraa ohjeita valittuasi seuraavasta näytöstä "WebAuthn-todennus".</value>
|
<value>Jatka valmistelemalla FIDO2 WebAuthn -todennuslaitteesi ja seuraa ohjeita valittuasi seuraavasta näytöstä "WebAuthn-todennus" -valinnan.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Fido2Desc" xml:space="preserve">
|
<data name="Fido2Desc" xml:space="preserve">
|
||||||
<value>FIDO2 WebAuthn -todennus mahdollistaa tunnistautumisen fyysisellä suojausavaimella.</value>
|
<value>FIDO2 WebAuthn -tunnistautumisen voi todentaa ulkoisella todennuslaitteella.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Fido2AuthenticateWebAuthn" xml:space="preserve">
|
<data name="Fido2AuthenticateWebAuthn" xml:space="preserve">
|
||||||
<value>WebAuthn-todennus</value>
|
<value>WebAuthn-todennus</value>
|
||||||
@@ -2138,10 +2138,10 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Organisaatiolla on yrityskäytäntö, joka liittää tilisi automaattisesti salasanan palautusapuun. Liitos sallii organisaation ylläpitäjien vaihtaa pääsalasanasi.</value>
|
<value>Organisaatiolla on yrityskäytäntö, joka liittää tilisi automaattisesti salasanan palautusapuun. Liitos sallii organisaation ylläpitäjien vaihtaa pääsalasanasi.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
|
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
|
||||||
<value>Organisaatiokäytännöt ovat määrittäneet holvisi aikakatkaisun enimmäisajaksi {0} tuntia {1} minuuttia.</value>
|
<value>Organisaatiokäytännöt ovat määrittäneet holvisi aikakatkaisun enimmäisajaksi {0} tunti(a) {1} minuutti(a).</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
||||||
<value>Organisaatiokäytännöt vaikuttavat holvisi aikakatkaisuun. Suurin sallittu aika on {0} tuntia {1} minuuttia. Holvillesi määritetty aikakatkaisutoiminto on {2}.</value>
|
<value>Organisaatiokäytännöt vaikuttavat holvisi aikakatkaisuun. Suurin sallittu aika on {0} tunti(a) {1} minuutti(a). Holvillesi määritetty aikakatkaisutoiminto on {2}.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
|
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
|
||||||
<value>Organisaatiokäytännöt ovat määrittäneet holville aikakatkaisutoiminnon {0}.</value>
|
<value>Organisaatiokäytännöt ovat määrittäneet holville aikakatkaisutoiminnon {0}.</value>
|
||||||
@@ -2303,7 +2303,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Määritä TOTP</value>
|
<value>Määritä TOTP</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OnceTheKeyIsSuccessfullyEntered" xml:space="preserve">
|
<data name="OnceTheKeyIsSuccessfullyEntered" xml:space="preserve">
|
||||||
<value>Kun avain on syötetty oikein, tallenna se
|
<value>Kun koodi on syötetty oikein, tallenna avain
|
||||||
turvallisesti valitsemalla "Lisää TOTP"</value>
|
turvallisesti valitsemalla "Lisää TOTP"</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NeverLockWarning" xml:space="preserve">
|
<data name="NeverLockWarning" xml:space="preserve">
|
||||||
@@ -2516,7 +2516,7 @@ Haluatko vaihtaa tähän tiliin?</value>
|
|||||||
<value>Laitteellesi on lähetetty ilmoitus.</value>
|
<value>Laitteellesi on lähetetty ilmoitus.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
|
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
|
||||||
<value>Varmista, että vahvistavan laitteen holvi on avattu ja että se näyttää saman tunnistelausekkeen.</value>
|
<value>Varmista, että holvisi on avattu ja tunnistelauseke täsmää toisella laitteella.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ResendNotification" xml:space="preserve">
|
<data name="ResendNotification" xml:space="preserve">
|
||||||
<value>Lähetä ilmoitus uudelleen</value>
|
<value>Lähetä ilmoitus uudelleen</value>
|
||||||
@@ -2564,7 +2564,7 @@ Haluatko vaihtaa tähän tiliin?</value>
|
|||||||
<value>Tärkeää</value>
|
<value>Tärkeää</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourMasterPasswordCannotBeRecoveredIfYouForgetItXCharactersMinimum" xml:space="preserve">
|
<data name="YourMasterPasswordCannotBeRecoveredIfYouForgetItXCharactersMinimum" xml:space="preserve">
|
||||||
<value>Pääsalasanaasi ei ole mahdollista palauttaa, jos unohdat sen! Vähintään {0} merkkiä.</value>
|
<value>Pääsalasanasi palautus ei ole mahdollista, jos unohdat sen! Vähintään {0} merkkiä.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WeakMasterPassword" xml:space="preserve">
|
<data name="WeakMasterPassword" xml:space="preserve">
|
||||||
<value>Heikko pääsalasana</value>
|
<value>Heikko pääsalasana</value>
|
||||||
@@ -2651,22 +2651,22 @@ Haluatko vaihtaa tähän tiliin?</value>
|
|||||||
<value>Muista tämä laite</value>
|
<value>Muista tämä laite</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Passkey" xml:space="preserve">
|
<data name="Passkey" xml:space="preserve">
|
||||||
<value>Pääsyavain</value>
|
<value>Suojausavain</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Passkeys" xml:space="preserve">
|
<data name="Passkeys" xml:space="preserve">
|
||||||
<value>Pääsyavaimet</value>
|
<value>Suojausavaimet</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Application" xml:space="preserve">
|
<data name="Application" xml:space="preserve">
|
||||||
<value>Sovellus</value>
|
<value>Sovellus</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
|
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
|
||||||
<value>Et voi muuttaa pääsyavainsovellusta, koska se mitätöisi avaimen.</value>
|
<value>Et voi muokata suojausavainsovellusta, koska se mitätöisi avaimen.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyWillNotBeCopied" xml:space="preserve">
|
<data name="PasskeyWillNotBeCopied" xml:space="preserve">
|
||||||
<value>Pääsyavainta ei kopioida</value>
|
<value>Suojausavainta ei kopioida</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
|
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
|
||||||
<value>Pääsyavain ei kopioidu kloonattuun kohteeseen. Haluatko jatkaa kloonausta?</value>
|
<value>Suojausavain ei kopioidu kloonattuun kohteeseen. Haluatko jatkaa kloonausta?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyApplication" xml:space="preserve">
|
<data name="CopyApplication" xml:space="preserve">
|
||||||
<value>Kopioi sovellus</value>
|
<value>Kopioi sovellus</value>
|
||||||
@@ -2794,13 +2794,13 @@ Haluatko vaihtaa tähän tiliin?</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>Tunti ja minuutti</value>
|
<value>1 tunti 1 minuutti</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OneHourAndXMinute" xml:space="preserve">
|
<data name="OneHourAndXMinute" xml:space="preserve">
|
||||||
<value>Tunti ja {0} minuuttia</value>
|
<value>1 tunti {0} minuuttia</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="XHoursAndOneMinute" xml:space="preserve">
|
<data name="XHoursAndOneMinute" xml:space="preserve">
|
||||||
<value>{0} tuntia ja minuutti</value>
|
<value>{0} tuntia 1 minuutti</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="XHoursAndYMinutes" xml:space="preserve">
|
<data name="XHoursAndYMinutes" xml:space="preserve">
|
||||||
<value>{0} tuntia {1} minuuttia</value>
|
<value>{0} tuntia {1} minuuttia</value>
|
||||||
@@ -2809,7 +2809,7 @@ Haluatko vaihtaa tähän tiliin?</value>
|
|||||||
<value>{0} tuntia</value>
|
<value>{0} tuntia</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
||||||
<value>Käytä Bitwardenia uusien pääsyavainten tallennukseen ja kirjaudu palveluihin holviisi aiemmin tallennetuilla avaimilla.</value>
|
<value>Käytä Bitwardeniin suojausavainten tallennukseen ja kirjaudu holviisi aiemmin tallennetuilla suojausavaimilla.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||||
<value>Android Autofill Framework -rajapintaa käytetään täytettäessä kirjautumistietoja laitteen muihin sovelluksiin.</value>
|
<value>Android Autofill Framework -rajapintaa käytetään täytettäessä kirjautumistietoja laitteen muihin sovelluksiin.</value>
|
||||||
@@ -2893,25 +2893,25 @@ Haluatko vaihtaa tähän tiliin?</value>
|
|||||||
<value>Muuta holvisi aikakatkaisutoimintoa määrittämällä lukituksen avaustapa.</value>
|
<value>Muuta holvisi aikakatkaisutoimintoa määrittämällä lukituksen avaustapa.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||||
<value>Valitse kirjautumistieto, johon pääsyavain tallennetaan</value>
|
<value>Valitse kirjautumistieto, johon suojausavain tallennetaan</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||||
<value>Tallenna pääsyavain uuteen kirjautumistietoon</value>
|
<value>Tallenna suojausavain uuteen kirjautumistietoon</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SavePasskey" xml:space="preserve">
|
<data name="SavePasskey" xml:space="preserve">
|
||||||
<value>Tallenna pääsyavain</value>
|
<value>Tallenna suojausavain</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeysForX" xml:space="preserve">
|
<data name="PasskeysForX" xml:space="preserve">
|
||||||
<value>Pääsyavaimet osoitteelle {0}</value>
|
<value>Suojausavaimet kohteelle {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordsForX" xml:space="preserve">
|
<data name="PasswordsForX" xml:space="preserve">
|
||||||
<value>Salasanat kohteelle {0}</value>
|
<value>Salasanat kohteelle {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OverwritePasskey" xml:space="preserve">
|
<data name="OverwritePasskey" xml:space="preserve">
|
||||||
<value>Korvataanko pääsyavain?</value>
|
<value>Korvataanko suojausavain?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
||||||
<value>Kohde sisältää jo pääsyavaimen. Haluatko varmasti korvata nykyisen avaimen?</value>
|
<value>Kohde sisältää jo suojausavaimen. Haluatko varmasti korvata nykyisen suojausavaimen?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
||||||
<value>Tilillesi kirjautuminen vaatii Duo-vahvistuksen.</value>
|
<value>Tilillesi kirjautuminen vaatii Duo-vahvistuksen.</value>
|
||||||
@@ -2929,17 +2929,17 @@ Haluatko vaihtaa tähän tiliin?</value>
|
|||||||
<value>Toiminto vaatii lisävahvistuksen. Jatka asettamalla lukituksen avaustapa Bitwardenin asetuksista.</value>
|
<value>Toiminto vaatii lisävahvistuksen. Jatka asettamalla lukituksen avaustapa Bitwardenin asetuksista.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
||||||
<value>Virhe luotaessa pääsyavainta</value>
|
<value>Virhe luotaessa suojausavainta</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ErrorReadingPasskey" xml:space="preserve">
|
<data name="ErrorReadingPasskey" xml:space="preserve">
|
||||||
<value>Virhe luettaessa pääsyavainta</value>
|
<value>Virhe luettaessa suojausavainta</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThereWasAProblemCreatingAPasskeyForXTryAgainLater" xml:space="preserve">
|
<data name="ThereWasAProblemCreatingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||||
<value>Virhe luotaessa pääsyavainta kohteeseen {0}. Yritä myöhemmin uudelleen.</value>
|
<value>Virhe luotaessa suojausavainta kohteelle {0}. Yritä myöhemmin uudelleen.</value>
|
||||||
<comment>The parameter is the RpId</comment>
|
<comment>The parameter is the RpId</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThereWasAProblemReadingAPasskeyForXTryAgainLater" xml:space="preserve">
|
<data name="ThereWasAProblemReadingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||||
<value>Virhe luettaessa kohteen {0} pääsyavainta. Yritä myöhemmin uudelleen.</value>
|
<value>Virhe luettaessa kohteen {0} suojausavainta. Yritä myöhemmin uudelleen.</value>
|
||||||
<comment>The parameter is the RpId</comment>
|
<comment>The parameter is the RpId</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||||
@@ -2955,42 +2955,54 @@ Haluatko vaihtaa tähän tiliin?</value>
|
|||||||
<value>Määritä automaattitäyttö</value>
|
<value>Määritä automaattitäyttö</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
||||||
<value>Tavoita salasanasi ja pääsyavaimesi välittömästi!</value>
|
<value>Tavoita salasanasi ja suojausavaimesi välittömästi!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAutoFillDescriptionLong" xml:space="preserve">
|
<data name="SetUpAutoFillDescriptionLong" xml:space="preserve">
|
||||||
<value>Määrittääksesi salasanojen automaattitäytön ja pääsyavainten hallinnan, aseta Bitwarden iOS-laitteesi asetuksista näiden oletusratkaisuksi.</value>
|
<value>Määrittääksesi salasanojen automaattitäytön ja suojausavainten hallinnan, aseta Bitwarden iOS-laitteesi asetuksista näiden oletusarvoiseksi palveluksi.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
<data name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
||||||
<value>1. Avaa laitteesi Asetukset > Salasanat > Salasanavalinnat</value>
|
<value>1. Avaa laitteesi Asetukset > Salasanat > Salasanavalinnat</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
||||||
<value>4. Kytke automaattitäyttö käyttöön</value>
|
<value>4. Kytke automaattinen täyttö käyttöön</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
||||||
<value>3. Valitse "Bitwarden" käyttääksesi sitä salasanoille ja pääsyavaimille</value>
|
<value>3. Valitse "Bitwarden" käyttääksesi sitä salasanoille ja suojausavaimille</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
||||||
<value>Pääsyavaimesi tallennetaan Bitwarden-holviisi</value>
|
<value>Suojausavaimesi tallennetaan Bitwarden-holviisi</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Pääsyavaimesi tallennetaan Bitwarden-holvisi kohteeseen {0}</value>
|
<value>Suojausavaimesi tallennetaan Bitwarden-holviisi kohteelle {0}</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Organisaatioiden kokoelmiin määrittämättömät kohteet eivät enää näy laitteiden "Kaikki holvit" -näkymissä, vaan ne ovat nähtävissä vain Hallintapaneelista. Määritä kohteet kokoelmiin Hallintapaneelista, jotta ne ovat jatkossakin käytettävissä kaikilta laitteilta.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>16.5.2024 alkaen kokoelmiin määrittämättömät organisaatioiden kohteet eivät enää näy laitteiden "Kaikki holvit" -näkymissä, vaan ne ovat nähtävissä vain Hallintapaneelista. Määritä kohteet kokoelmiin Hallintapaneelista, jotta ne ovat jatkossakin käytettävissä kaikilta laitteilta.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Muistuta myöhemmin</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Huomautus</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Pääsyavaimia ei tueta tässä sovelluksessa</value>
|
<value>Suojausavaimia ei tueta tässä sovelluksessa</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
||||||
<value>Pääsyavaintoiminto epäonnistui, koska selaimella ei ole korotettuja oikeuksia</value>
|
<value>Suojausavaintoiminto epäonnistui, koska selainta ei ole hyväksytty</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
||||||
<value>Pääsyavaintoiminto epäonnistui, koska selaimen allekirjoitus ei täsmää</value>
|
<value>Suojausavaintoiminto epäonnistui, koska selaimen allekirjoitus ei täsmää</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
||||||
<value>Pääsyavaintoiminto epäonnistui, koska asset-liitoksia puuttuu</value>
|
<value>Suojausavaintoiminto epäonnistui, koska asset-liitoksia puuttuu</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseAppNotFoundInAssetLinks" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseAppNotFoundInAssetLinks" xml:space="preserve">
|
||||||
<value>Pääsyavaintoiminto epäonnistui, koska sovellusta ei löytynyt asset-liitoksista</value>
|
<value>Suojausavaintoiminto epäonnistui, koska sovellusta ei löytynyt asset-liitoksista</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
||||||
<value>Pääsyavaintoiminto epäonnistui, koska sovellusta ei voitu varmentaa</value>
|
<value>Suojausavaintoiminto epäonnistui, koska sovellusta ei voitu varmentaa</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2769,7 +2769,7 @@ Gusto mo bang pumunta sa account na ito?</value>
|
|||||||
<value>Account security</value>
|
<value>Account security</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||||
<value>Bitwarden help center</value>
|
<value>Bitwarden Help Center</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||||
<value>Contact Bitwarden support</value>
|
<value>Contact Bitwarden support</value>
|
||||||
@@ -2975,6 +2975,18 @@ Gusto mo bang pumunta sa account na ito?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys not supported for this app</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -1195,7 +1195,7 @@ La numérisation se fera automatiquement.</value>
|
|||||||
<value>Windows Hello</value>
|
<value>Windows Hello</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
||||||
<value>Nous n'avons pas pu ouvrir automatiquement le menu des paramètres du fournisseur d'identités d'Android pour vous. Vous pouvez naviguer manuellement vers ce menu depuis les paramètres Android > Système > Mots de passe et comptes > Mots de passe, clés d'accès et services de données.</value>
|
<value>We were unable to automatically open the Android credential provider settings menu for you. You can navigate to the credential provider settings menu manually from Android Settings > System > Passwords & accounts > Passwords, passkeys and data services.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||||
<value>Nous n'avons pas pu ouvrir automatiquement le menu des paramètres de saisie automatique d'Android. Vous pouvez manuellement naviguer vers le menu des paramètres de saisie automatique à partir des paramètres Android > Système > Langues et saisie > Paramètres avancés > Service de saisie automatique.</value>
|
<value>Nous n'avons pas pu ouvrir automatiquement le menu des paramètres de saisie automatique d'Android. Vous pouvez manuellement naviguer vers le menu des paramètres de saisie automatique à partir des paramètres Android > Système > Langues et saisie > Paramètres avancés > Service de saisie automatique.</value>
|
||||||
@@ -2840,7 +2840,7 @@ Voulez-vous basculer vers ce compte ?</value>
|
|||||||
<value>Continuer vers la boutique des applications ?</value>
|
<value>Continuer vers la boutique des applications ?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
||||||
<value>Continuer vers les paramètres de l'appareil ?</value>
|
<value>Continue to device Settings?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
||||||
<value>Rendez votre compte plus sécurisé en configurant l'authentification à deux facteurs dans l'application web Bitwarden.</value>
|
<value>Rendez votre compte plus sécurisé en configurant l'authentification à deux facteurs dans l'application web Bitwarden.</value>
|
||||||
@@ -2893,10 +2893,10 @@ Voulez-vous basculer vers ce compte ?</value>
|
|||||||
<value>Configurez une méthode de déverrouillage pour modifier l'action après délai d'expiration de votre coffre.</value>
|
<value>Configurez une méthode de déverrouillage pour modifier l'action après délai d'expiration de votre coffre.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||||
<value>Choisissez un identifiant vers lequel enregistrer cette clé d'accès</value>
|
<value>Choose a login to save this passkey to</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||||
<value>Enregistrer la clé d'accès comme nouvel identifiant</value>
|
<value>Save passkey as new login</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SavePasskey" xml:space="preserve">
|
<data name="SavePasskey" xml:space="preserve">
|
||||||
<value>Enregistrer la clé d'accès</value>
|
<value>Enregistrer la clé d'accès</value>
|
||||||
@@ -2908,10 +2908,10 @@ Voulez-vous basculer vers ce compte ?</value>
|
|||||||
<value>Mots de passe pour {0}</value>
|
<value>Mots de passe pour {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OverwritePasskey" xml:space="preserve">
|
<data name="OverwritePasskey" xml:space="preserve">
|
||||||
<value>Écraser la clé d'accès ?</value>
|
<value>Overwrite passkey?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
||||||
<value>Cet élément contient déjà une clé d'accès. Êtes-vous sûr de vouloir écraser la clé d'accès actuelle ?</value>
|
<value>This item already contains a passkey. Are you sure you want to overwrite the current passkey?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
||||||
<value>L'authentification à deux facteurs Duo est requise pour votre compte. </value>
|
<value>L'authentification à deux facteurs Duo est requise pour votre compte. </value>
|
||||||
@@ -2923,10 +2923,10 @@ Voulez-vous basculer vers ce compte ?</value>
|
|||||||
<value>Lancer Duo</value>
|
<value>Lancer Duo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationRequiredByX" xml:space="preserve">
|
<data name="VerificationRequiredByX" xml:space="preserve">
|
||||||
<value>Vérification requise par {0}</value>
|
<value>Verification required by {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationRequiredForThisActionSetUpAnUnlockMethodInBitwardenToContinue" xml:space="preserve">
|
<data name="VerificationRequiredForThisActionSetUpAnUnlockMethodInBitwardenToContinue" xml:space="preserve">
|
||||||
<value>Vérification requise pour cette action. Configurez une méthode de déverrouillage dans Bitwarden pour continuer.</value>
|
<value>Verification required for this action. Set up an unlock method in Bitwarden to continue.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
||||||
<value>Erreur de création de la clé d'accès</value>
|
<value>Erreur de création de la clé d'accès</value>
|
||||||
@@ -2943,16 +2943,16 @@ Voulez-vous basculer vers ce compte ?</value>
|
|||||||
<comment>The parameter is the RpId</comment>
|
<comment>The parameter is the RpId</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||||
<value>Vérification de l'identité...</value>
|
<value>Verifying identity...</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Passwords" xml:space="preserve">
|
<data name="Passwords" xml:space="preserve">
|
||||||
<value>Mots de passe</value>
|
<value>Mots de passe</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnknownAccount" xml:space="preserve">
|
<data name="UnknownAccount" xml:space="preserve">
|
||||||
<value>Compte inconnu</value>
|
<value>Unknown account</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAutofill" xml:space="preserve">
|
<data name="SetUpAutofill" xml:space="preserve">
|
||||||
<value>Configurer la saisie automatique</value>
|
<value>Set up auto-fill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
||||||
<value>Obtenez un accès instantané à vos mots de passe et vos clés d'accès !</value>
|
<value>Obtenez un accès instantané à vos mots de passe et vos clés d'accès !</value>
|
||||||
@@ -2961,10 +2961,10 @@ Voulez-vous basculer vers ce compte ?</value>
|
|||||||
<value>Pour configurer la saisie automatique du mot de passe et la gestion des clés d'accès, définissez Bitwarden comme votre fournisseur préféré dans les paramètres iOS.</value>
|
<value>Pour configurer la saisie automatique du mot de passe et la gestion des clés d'accès, définissez Bitwarden comme votre fournisseur préféré dans les paramètres iOS.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
<data name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
||||||
<value>1. Allez dans les paramètres de votre appareil > Mots de passe > Options des mots de passe</value>
|
<value>1. Go to your device's Settings > Passwords > Password Options</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
||||||
<value>2. Activer la saisie automatique</value>
|
<value>2. Turn on AutoFill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
||||||
<value>3. Sélectionnez "Bitwarden" pour l'utiliser pour les mots de passe et les clés d'accès</value>
|
<value>3. Sélectionnez "Bitwarden" pour l'utiliser pour les mots de passe et les clés d'accès</value>
|
||||||
@@ -2975,6 +2975,18 @@ Voulez-vous basculer vers ce compte ?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Votre clé d'accès sera enregistrée votre coffre Bitwarden pour {0}</value>
|
<value>Votre clé d'accès sera enregistrée votre coffre Bitwarden pour {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Les éléments d'organisation non assignés ne sont plus visibles dans la vue de Tous les coffres et sont uniquement accessibles via la Console d'administration. Assignez ces éléments à une collection à partir de la Console d'administration pour les rendre visibles.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>Au 2 mai 2024, les éléments d'organisation non assignés ne sont plus visibles dans la vue de Tous les coffres et sont uniquement accessibles via la Console d'administration. Assignez ces éléments à une collection à partir de la Console d'administration pour les rendre visibles.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Me le rappeler plus tard</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Remarque</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Clés d'accès non supportées par cette application</value>
|
<value>Clés d'accès non supportées par cette application</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -2982,7 +2994,7 @@ Voulez-vous basculer vers ce compte ?</value>
|
|||||||
<value>Passkey operation failed because browser is not privileged</value>
|
<value>Passkey operation failed because browser is not privileged</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
||||||
<value>L'opération de la clé d'accès a échoué car la signature du navigateur ne correspond pas</value>
|
<value>Passkey operation failed because browser signature does not match</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
||||||
<value>Passkey operation failed because of missing asset links</value>
|
<value>Passkey operation failed because of missing asset links</value>
|
||||||
@@ -2991,6 +3003,6 @@ Voulez-vous basculer vers ce compte ?</value>
|
|||||||
<value>Passkey operation failed because app not found in asset links</value>
|
<value>Passkey operation failed because app not found in asset links</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
||||||
<value>L'opération de la clé d'accès a échoué car l'application n'a pas pu être vérifiée</value>
|
<value>Passkey operation failed because app could not be verified</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -296,67 +296,67 @@
|
|||||||
<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>A miña caixa forte</value>
|
<value>My vault</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>Autenticador</value>
|
<value>Authenticator</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">
|
||||||
<value>Nome</value>
|
<value>Name</value>
|
||||||
<comment>Label for an entity name.</comment>
|
<comment>Label for an entity name.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="No" xml:space="preserve">
|
<data name="No" xml:space="preserve">
|
||||||
<value>Non</value>
|
<value>No</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Notes" xml:space="preserve">
|
<data name="Notes" xml:space="preserve">
|
||||||
<value>Notas</value>
|
<value>Notes</value>
|
||||||
<comment>Label for notes.</comment>
|
<comment>Label for notes.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Ok" xml:space="preserve">
|
<data name="Ok" xml:space="preserve">
|
||||||
<value>Aceptar</value>
|
<value>Ok</value>
|
||||||
<comment>Acknowledgement.</comment>
|
<comment>Acknowledgement.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Password" xml:space="preserve">
|
<data name="Password" xml:space="preserve">
|
||||||
<value>Contrasinal</value>
|
<value>Password</value>
|
||||||
<comment>Label for a password.</comment>
|
<comment>Label for a password.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Save" xml:space="preserve">
|
<data name="Save" xml:space="preserve">
|
||||||
<value>Gardar</value>
|
<value>Save</value>
|
||||||
<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>Mover</value>
|
<value>Move</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Saving" xml:space="preserve">
|
<data name="Saving" xml:space="preserve">
|
||||||
<value>Gardando...</value>
|
<value>Saving...</value>
|
||||||
<comment>Message shown when interacting with the server</comment>
|
<comment>Message shown when interacting with the server</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Settings" xml:space="preserve">
|
<data name="Settings" xml:space="preserve">
|
||||||
<value>Axustes</value>
|
<value>Settings</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">
|
||||||
<value>Amosar</value>
|
<value>Show</value>
|
||||||
<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>Elemento eliminado</value>
|
<value>Item deleted</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>Enviar</value>
|
<value>Submit</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Sync" xml:space="preserve">
|
<data name="Sync" xml:space="preserve">
|
||||||
<value>Sincronizar</value>
|
<value>Sync</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>Grazas</value>
|
<value>Thank you</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Tools" xml:space="preserve">
|
<data name="Tools" xml:space="preserve">
|
||||||
<value>Ferramentas</value>
|
<value>Tools</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">
|
||||||
@@ -364,53 +364,53 @@
|
|||||||
<comment>Label for a uri/url.</comment>
|
<comment>Label for a uri/url.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseFingerprintToUnlock" xml:space="preserve">
|
<data name="UseFingerprintToUnlock" xml:space="preserve">
|
||||||
<value>Engade unha pegada dactilar para desbloquear</value>
|
<value>Use fingerprint to unlock</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Username" xml:space="preserve">
|
<data name="Username" xml:space="preserve">
|
||||||
<value>Nome de usuario</value>
|
<value>Username</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>O campo {0} é obrigatorio.</value>
|
<value>The {0} field is required.</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">
|
||||||
<value>{0} copiados</value>
|
<value>{0} copied</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">
|
||||||
<value>Verifica a pegada dixital</value>
|
<value>Verify fingerprint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyMasterPassword" xml:space="preserve">
|
<data name="VerifyMasterPassword" xml:space="preserve">
|
||||||
<value>Verifica o contrasinal mestre</value>
|
<value>Verify master password</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyPIN" xml:space="preserve">
|
<data name="VerifyPIN" xml:space="preserve">
|
||||||
<value>Verifica o PIN</value>
|
<value>Verify PIN</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Version" xml:space="preserve">
|
<data name="Version" xml:space="preserve">
|
||||||
<value>Versión</value>
|
<value>Version</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="View" xml:space="preserve">
|
<data name="View" xml:space="preserve">
|
||||||
<value>Vista</value>
|
<value>View</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VisitOurWebsite" xml:space="preserve">
|
<data name="VisitOurWebsite" xml:space="preserve">
|
||||||
<value>Visita o noso sitio web</value>
|
<value>Visit our website</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Website" xml:space="preserve">
|
<data name="Website" xml:space="preserve">
|
||||||
<value>Sitio web</value>
|
<value>Website</value>
|
||||||
<comment>Label for a website.</comment>
|
<comment>Label for a website.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Yes" xml:space="preserve">
|
<data name="Yes" xml:space="preserve">
|
||||||
<value>Si</value>
|
<value>Yes</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Account" xml:space="preserve">
|
<data name="Account" xml:space="preserve">
|
||||||
<value>Conta</value>
|
<value>Account</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountCreated" xml:space="preserve">
|
<data name="AccountCreated" xml:space="preserve">
|
||||||
<value>A túa nova conta foi creada! Podes iniciar sesión agora.</value>
|
<value>Your new account has been created! You may now log in.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AddAnItem" xml:space="preserve">
|
<data name="AddAnItem" xml:space="preserve">
|
||||||
<value>Engadir un elemento</value>
|
<value>Add an Item</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AppExtension" xml:space="preserve">
|
<data name="AppExtension" xml:space="preserve">
|
||||||
<value>App extension</value>
|
<value>App extension</value>
|
||||||
@@ -2769,7 +2769,7 @@ Do you want to switch to this account?</value>
|
|||||||
<value>Account security</value>
|
<value>Account security</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||||
<value>Bitwarden help center</value>
|
<value>Bitwarden Help Center</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||||
<value>Contact Bitwarden support</value>
|
<value>Contact Bitwarden support</value>
|
||||||
@@ -2975,6 +2975,18 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys not supported for this app</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -229,7 +229,7 @@
|
|||||||
<value>תיקיות</value>
|
<value>תיקיות</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FolderUpdated" xml:space="preserve">
|
<data name="FolderUpdated" xml:space="preserve">
|
||||||
<value>תיקיה עודכנה</value>
|
<value>תיקיה עודכנה.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GoToWebsite" xml:space="preserve">
|
<data name="GoToWebsite" xml:space="preserve">
|
||||||
<value>עבור לאתר</value>
|
<value>עבור לאתר</value>
|
||||||
@@ -1138,10 +1138,10 @@ Bitwarden בעזרת פתיחת חלון "הגדרות".</value>
|
|||||||
<value>תוקף</value>
|
<value>תוקף</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ShowWebsiteIcons" xml:space="preserve">
|
<data name="ShowWebsiteIcons" xml:space="preserve">
|
||||||
<value>הצג סמלים של אתרי האינטרננט</value>
|
<value>Show website icons</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ShowWebsiteIconsDescription" xml:space="preserve">
|
<data name="ShowWebsiteIconsDescription" xml:space="preserve">
|
||||||
<value>הצג תמונה מוכרת בכל נסיון התחברות.</value>
|
<value>Show a recognizable image next to each login.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="IconsUrl" xml:space="preserve">
|
<data name="IconsUrl" xml:space="preserve">
|
||||||
<value>כתובת השרת עבור האייקון</value>
|
<value>כתובת השרת עבור האייקון</value>
|
||||||
@@ -1385,13 +1385,13 @@ Bitwarden בעזרת פתיחת חלון "הגדרות".</value>
|
|||||||
<value>חפש אוסף</value>
|
<value>חפש אוסף</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchFileSends" xml:space="preserve">
|
<data name="SearchFileSends" xml:space="preserve">
|
||||||
<value>חיפוש Send קבצים</value>
|
<value>Search file Sends</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchTextSends" xml:space="preserve">
|
<data name="SearchTextSends" xml:space="preserve">
|
||||||
<value>חיפוש Send טקסט</value>
|
<value>Search text Sends</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchGroup" xml:space="preserve">
|
<data name="SearchGroup" xml:space="preserve">
|
||||||
<value>חיפוש {0}</value>
|
<value>Search {0}</value>
|
||||||
<comment>ex: Search Logins</comment>
|
<comment>ex: Search Logins</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Type" xml:space="preserve">
|
<data name="Type" xml:space="preserve">
|
||||||
@@ -1555,7 +1555,7 @@ Bitwarden בעזרת פתיחת חלון "הגדרות".</value>
|
|||||||
<value>ברירת מחדל (מערכת)</value>
|
<value>ברירת מחדל (מערכת)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DefaultDarkTheme" xml:space="preserve">
|
<data name="DefaultDarkTheme" xml:space="preserve">
|
||||||
<value>ערכת נושא כהה כברירת מחדל</value>
|
<value>Default dark theme</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyNotes" xml:space="preserve">
|
<data name="CopyNotes" xml:space="preserve">
|
||||||
<value>העתק פתק</value>
|
<value>העתק פתק</value>
|
||||||
@@ -1582,10 +1582,10 @@ Bitwarden בעזרת פתיחת חלון "הגדרות".</value>
|
|||||||
<comment>'Solarized Dark' is the name of a specific color scheme. It should not be translated.</comment>
|
<comment>'Solarized Dark' is the name of a specific color scheme. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillBlockedUris" xml:space="preserve">
|
<data name="AutofillBlockedUris" xml:space="preserve">
|
||||||
<value>מילוי אוטומטי של כתובות חסומות</value>
|
<value>Auto-fill blocked URIs</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AskToAddLogin" xml:space="preserve">
|
<data name="AskToAddLogin" xml:space="preserve">
|
||||||
<value>שאל אם לשמור פרטי כניסה</value>
|
<value>Ask to add login</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AskToAddLoginDescription" xml:space="preserve">
|
<data name="AskToAddLoginDescription" xml:space="preserve">
|
||||||
<value>Ask to add an item if one isn't found in your vault.</value>
|
<value>Ask to add an item if one isn't found in your vault.</value>
|
||||||
@@ -1824,7 +1824,7 @@ Bitwarden בעזרת פתיחת חלון "הגדרות".</value>
|
|||||||
<value>אפליקציית Bitwarden צריכה הרשאות בכדי לעבוד באופן תקין. פתח את הגדרות Bitwarden, בחר את "שירותי ההשלמה-האוטומטית" ואפשר את "צייר מעל" (Draw-Over).</value>
|
<value>אפליקציית Bitwarden צריכה הרשאות בכדי לעבוד באופן תקין. פתח את הגדרות Bitwarden, בחר את "שירותי ההשלמה-האוטומטית" ואפשר את "צייר מעל" (Draw-Over).</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyManagement" xml:space="preserve">
|
<data name="PasskeyManagement" xml:space="preserve">
|
||||||
<value>ניהול Passkey</value>
|
<value>Passkey management</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServices" xml:space="preserve">
|
<data name="AutofillServices" xml:space="preserve">
|
||||||
<value>שירותי ההשלמה האוטומטית</value>
|
<value>שירותי ההשלמה האוטומטית</value>
|
||||||
@@ -1885,7 +1885,7 @@ Bitwarden בעזרת פתיחת חלון "הגדרות".</value>
|
|||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Text" xml:space="preserve">
|
<data name="Text" xml:space="preserve">
|
||||||
<value>טקסט</value>
|
<value>Text</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TypeText" xml:space="preserve">
|
<data name="TypeText" xml:space="preserve">
|
||||||
<value>טקסט</value>
|
<value>טקסט</value>
|
||||||
@@ -2771,7 +2771,7 @@ Do you want to switch to this account?</value>
|
|||||||
<value>Account security</value>
|
<value>Account security</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||||
<value>Bitwarden help center</value>
|
<value>Bitwarden Help Center</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||||
<value>Contact Bitwarden support</value>
|
<value>Contact Bitwarden support</value>
|
||||||
@@ -2977,6 +2977,18 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys not supported for this app</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -276,16 +276,16 @@
|
|||||||
<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>
|
||||||
@@ -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>प्रमाणीकरण</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>
|
||||||
@@ -349,7 +349,7 @@
|
|||||||
<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">
|
||||||
@@ -2974,6 +2974,18 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Passkeys not supported for this app</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -172,7 +172,7 @@
|
|||||||
<comment>Message shown when interacting with the server</comment>
|
<comment>Message shown when interacting with the server</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="DoYouReallyWantToDelete" xml:space="preserve">
|
<data name="DoYouReallyWantToDelete" xml:space="preserve">
|
||||||
<value>Sigurno želiš izbrisati? To se ne može poništiti.</value>
|
<value>Stvarno želiš izbrisati? To se ne može poništiti.</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">
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
<value>Račun</value>
|
<value>Račun</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountCreated" xml:space="preserve">
|
<data name="AccountCreated" xml:space="preserve">
|
||||||
<value>Tvoj novi račun je stvoren! Sada se možeš prijaviti.</value>
|
<value>Tvoj novi račun je kreiran! Sada se možeš prijaviti.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AddAnItem" xml:space="preserve">
|
<data name="AddAnItem" xml:space="preserve">
|
||||||
<value>Dodaj stavku</value>
|
<value>Dodaj stavku</value>
|
||||||
@@ -422,7 +422,7 @@
|
|||||||
<value>Usluga auto-ispune</value>
|
<value>Usluga auto-ispune</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
||||||
<value>Postavi Bitwarden kao zadanog davatelja usluga za pristupne ključeve putem postavki uređaja.</value>
|
<value>Set Bitwarden as your passkey provider in device settings.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||||
<value>Izbjegavaj dvosmislene znakove</value>
|
<value>Izbjegavaj dvosmislene znakove</value>
|
||||||
@@ -623,7 +623,7 @@
|
|||||||
<value>Zadane postavke preuzete iz generatora lozinki glavne aplikacije Bitwarden.</value>
|
<value>Zadane postavke preuzete iz generatora lozinki glavne aplikacije Bitwarden.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Options" xml:space="preserve">
|
<data name="Options" xml:space="preserve">
|
||||||
<value>Mogućnosti</value>
|
<value>Opcije</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Other" xml:space="preserve">
|
<data name="Other" xml:space="preserve">
|
||||||
<value>Ostalo</value>
|
<value>Ostalo</value>
|
||||||
@@ -1100,7 +1100,7 @@
|
|||||||
<value>gđica.</value>
|
<value>gđica.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Mx" xml:space="preserve">
|
<data name="Mx" xml:space="preserve">
|
||||||
<value>gx.</value>
|
<value>Mx</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="November" xml:space="preserve">
|
<data name="November" xml:space="preserve">
|
||||||
<value>studeni</value>
|
<value>studeni</value>
|
||||||
@@ -1194,7 +1194,7 @@
|
|||||||
<value>Windows Hello</value>
|
<value>Windows Hello</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
||||||
<value>Nismo uspjeli automatski otvoriti izbornik postavki davatelja vjerodajnica za Android. Otvorite ručno: Android Settings > Sustav > Lozinke i računi > Lozinke, pristupni ključevi i podatkovne usluge.</value>
|
<value>We were unable to automatically open the Android credential provider settings menu for you. You can navigate to the credential provider settings menu manually from Android Settings > System > Passwords & accounts > Passwords, passkeys and data services.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||||
<value>Nismo mogli otvoriti Andorid postavke automatskog popunjavanja. Možeš ručno otvoriti izbornik: Sustav -> Jezici i unos -> Dodatne postavke tipkovnice -> Automatsko popunjavanje</value>
|
<value>Nismo mogli otvoriti Andorid postavke automatskog popunjavanja. Možeš ručno otvoriti izbornik: Sustav -> Jezici i unos -> Dodatne postavke tipkovnice -> Automatsko popunjavanje</value>
|
||||||
@@ -1821,7 +1821,7 @@
|
|||||||
<value>Bitwarden zahtijeva radnju - Bitwarden Postavke -> Usluge auto-ispune -> uključi opciju „Koristi preklapanje”</value>
|
<value>Bitwarden zahtijeva radnju - Bitwarden Postavke -> Usluge auto-ispune -> uključi opciju „Koristi preklapanje”</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyManagement" xml:space="preserve">
|
<data name="PasskeyManagement" xml:space="preserve">
|
||||||
<value>Upravljanje pristupnim ključevima</value>
|
<value>Passkey management</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServices" xml:space="preserve">
|
<data name="AutofillServices" xml:space="preserve">
|
||||||
<value>Usluge auto-ispune</value>
|
<value>Usluge auto-ispune</value>
|
||||||
@@ -2175,19 +2175,19 @@
|
|||||||
<value>Račun uspješno uklonjen</value>
|
<value>Račun uspješno uklonjen</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DeleteAccount" xml:space="preserve">
|
<data name="DeleteAccount" xml:space="preserve">
|
||||||
<value>Izbriši račun</value>
|
<value>Obriši račun</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DeletingYourAccountIsPermanent" xml:space="preserve">
|
<data name="DeletingYourAccountIsPermanent" xml:space="preserve">
|
||||||
<value>Brisanje tvog računa je nepovratno</value>
|
<value>Brisanje tvog računa je nepovratno</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DeleteAccountExplanation" xml:space="preserve">
|
<data name="DeleteAccountExplanation" xml:space="preserve">
|
||||||
<value>Tvoj račun i svi povezani podaci biti će nepovratno izbrisani. Sigurno želiš nastaviti?</value>
|
<value>Tvoj račun i svi povezani podaci biti će nepovratno obrisani. Sigurno želiš nastaviti?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DeletingYourAccount" xml:space="preserve">
|
<data name="DeletingYourAccount" xml:space="preserve">
|
||||||
<value>Brisanje tvog računa</value>
|
<value>Brisanje tvog računa</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourAccountHasBeenPermanentlyDeleted" xml:space="preserve">
|
<data name="YourAccountHasBeenPermanentlyDeleted" xml:space="preserve">
|
||||||
<value>Tvoj račun je trajno izbrisan.</value>
|
<value>Tvoj račun je trajno obrisan.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InvalidVerificationCode" xml:space="preserve">
|
<data name="InvalidVerificationCode" xml:space="preserve">
|
||||||
<value>Nevažeći kôd za provjeru</value>
|
<value>Nevažeći kôd za provjeru</value>
|
||||||
@@ -2806,7 +2806,7 @@
|
|||||||
<value>{0} sat/i</value>
|
<value>{0} sat/i</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
||||||
<value>Koristi Bitwarden za spremanje novih pristupnih ključeva i prijavu pristupnim ključevima spremljenima u tvoj trezor.</value>
|
<value>Use Bitwarden to save new passkeys and log in with passkeys stored in your vault.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||||
<value>Android Autofill Framework se koristi za pomoć pri ispunjavanju prijava, platnih kartica i identifikacijskih podataka u drugim aplikacijama na tvojem uređaju.</value>
|
<value>Android Autofill Framework se koristi za pomoć pri ispunjavanju prijava, platnih kartica i identifikacijskih podataka u drugim aplikacijama na tvojem uređaju.</value>
|
||||||
@@ -2831,13 +2831,13 @@
|
|||||||
<value>Kontaktiraj podršku?</value>
|
<value>Kontaktiraj podršku?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToPrivacyPolicy" xml:space="preserve">
|
<data name="ContinueToPrivacyPolicy" xml:space="preserve">
|
||||||
<value>Nastavi na politiku privatnosti?</value>
|
<value>Continue to privacy policy?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToAppStore" xml:space="preserve">
|
<data name="ContinueToAppStore" xml:space="preserve">
|
||||||
<value>Nastavi u trgovinu aplikacijama?</value>
|
<value>Nastavi u trgovinu aplikacijama?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
||||||
<value>Nastavi na postavke uređaja?</value>
|
<value>Continue to device Settings?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
||||||
<value>Učini svoj račun sigurnijim uključivanjem prijave dvofaktorskom autentifikacijom u Bitwarden web aplikaciji.</value>
|
<value>Učini svoj račun sigurnijim uključivanjem prijave dvofaktorskom autentifikacijom u Bitwarden web aplikaciji.</value>
|
||||||
@@ -2856,7 +2856,7 @@
|
|||||||
<value>Ne možeš naći što te zanima? Kontaktiraj Bitwarden podršku na bitwarden.com.</value>
|
<value>Ne možeš naći što te zanima? Kontaktiraj Bitwarden podršku na bitwarden.com.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PrivacyPolicyDescriptionLong" xml:space="preserve">
|
<data name="PrivacyPolicyDescriptionLong" xml:space="preserve">
|
||||||
<value>Pogledaj našu politiku privatnosti na bitwarden.com.</value>
|
<value>Check out our privacy policy on bitwarden.com.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExploreMoreFeaturesOfYourBitwardenAccountOnTheWebApp" xml:space="preserve">
|
<data name="ExploreMoreFeaturesOfYourBitwardenAccountOnTheWebApp" xml:space="preserve">
|
||||||
<value>Pronađi viđe značajki svojeg Bitwarden računa u web aplikaciji.</value>
|
<value>Pronađi viđe značajki svojeg Bitwarden računa u web aplikaciji.</value>
|
||||||
@@ -2890,104 +2890,116 @@
|
|||||||
<value>Za promjenu vremena isteka trezora, odredi način otključavanja.</value>
|
<value>Za promjenu vremena isteka trezora, odredi način otključavanja.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||||
<value>Odaberi za koju prijavu želiš spremiti ovaj pristupni ključ</value>
|
<value>Choose a login to save this passkey to</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||||
<value>Spremi pristupni ključ kao novu prijavu</value>
|
<value>Save passkey as new login</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SavePasskey" xml:space="preserve">
|
<data name="SavePasskey" xml:space="preserve">
|
||||||
<value>Spremi pristupni ključ</value>
|
<value>Save passkey</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeysForX" xml:space="preserve">
|
<data name="PasskeysForX" xml:space="preserve">
|
||||||
<value>Pristupni ključ za {0}</value>
|
<value>Passkeys for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordsForX" xml:space="preserve">
|
<data name="PasswordsForX" xml:space="preserve">
|
||||||
<value>Lozinke za {0}</value>
|
<value>Passwords for {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OverwritePasskey" xml:space="preserve">
|
<data name="OverwritePasskey" xml:space="preserve">
|
||||||
<value>Prebriši pristupni ključ?</value>
|
<value>Overwrite passkey?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
||||||
<value>Ova stavka već sadrži pristupni ključ. Sigurno želiš prebrisati trenutni pristupni ključ?</value>
|
<value>This item already contains a passkey. Are you sure you want to overwrite the current passkey?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
||||||
<value>Za tvoj račun je potrebna Duo dvostruka autentifikacija. </value>
|
<value>Duo two-step login is required for your account. </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FollowTheStepsFromDuoToFinishLoggingIn" xml:space="preserve">
|
<data name="FollowTheStepsFromDuoToFinishLoggingIn" xml:space="preserve">
|
||||||
<value>Prati Duo korake za dovršetak prijave.</value>
|
<value>Follow the steps from Duo to finish logging in.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LaunchDuo" xml:space="preserve">
|
<data name="LaunchDuo" xml:space="preserve">
|
||||||
<value>Pokreni Duo</value>
|
<value>Launch Duo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationRequiredByX" xml:space="preserve">
|
<data name="VerificationRequiredByX" xml:space="preserve">
|
||||||
<value>Potrebna potvrda od {0}</value>
|
<value>Verification required by {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationRequiredForThisActionSetUpAnUnlockMethodInBitwardenToContinue" xml:space="preserve">
|
<data name="VerificationRequiredForThisActionSetUpAnUnlockMethodInBitwardenToContinue" xml:space="preserve">
|
||||||
<value>Za ovu je radnju potrebna potvrda. Za nastavak, podesi način otključavanja u Bitwardenu.</value>
|
<value>Verification required for this action. Set up an unlock method in Bitwarden to continue.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
||||||
<value>Greška pri stvaranju pristupnog ključa</value>
|
<value>Error creating passkey</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ErrorReadingPasskey" xml:space="preserve">
|
<data name="ErrorReadingPasskey" xml:space="preserve">
|
||||||
<value>Greška pri čitanju pristupnog ključa</value>
|
<value>Error reading passkey</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThereWasAProblemCreatingAPasskeyForXTryAgainLater" xml:space="preserve">
|
<data name="ThereWasAProblemCreatingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||||
<value>Došlo je do greške kod stvaranja pristupnog ključa za {0}. Pokušaj ponovno kasnije.</value>
|
<value>There was a problem creating a passkey for {0}. Try again later.</value>
|
||||||
<comment>The parameter is the RpId</comment>
|
<comment>The parameter is the RpId</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThereWasAProblemReadingAPasskeyForXTryAgainLater" xml:space="preserve">
|
<data name="ThereWasAProblemReadingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||||
<value>Došlo je do greške kod čitanja pristupnog ključa za {0}. Pokušaj ponovno kasnije.</value>
|
<value>There was a problem reading your passkey for {0}. Try again later.</value>
|
||||||
<comment>The parameter is the RpId</comment>
|
<comment>The parameter is the RpId</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||||
<value>Potvrda identiteta...</value>
|
<value>Verifying identity...</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Passwords" xml:space="preserve">
|
<data name="Passwords" xml:space="preserve">
|
||||||
<value>Lozinke</value>
|
<value>Passwords</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnknownAccount" xml:space="preserve">
|
<data name="UnknownAccount" xml:space="preserve">
|
||||||
<value>Nepoznati račun</value>
|
<value>Unknown account</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAutofill" xml:space="preserve">
|
<data name="SetUpAutofill" xml:space="preserve">
|
||||||
<value>Podesi auto-ispunu</value>
|
<value>Set up auto-fill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
||||||
<value>Dobivanje trenutnog pristupa tvojim lozinkama!</value>
|
<value>Get instant access to your passwords and passkeys!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAutoFillDescriptionLong" xml:space="preserve">
|
<data name="SetUpAutoFillDescriptionLong" xml:space="preserve">
|
||||||
<value>Za postavljanje auto-ispune lozinki i upravljanje pristupnim ključevima, postavi Bitwarden kao svog odabranog davatelja usluga u iOS postavkama.</value>
|
<value>To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
<data name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
||||||
<value>1. Postavke > Lozinke > Opcije lozinke</value>
|
<value>1. Go to your device's Settings > Passwords > Password Options</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
||||||
<value>2. Uključi „Automatski ispuni lozinke i povezne ključeve”</value>
|
<value>2. Turn on AutoFill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
||||||
<value>3. Odaberi „Bitwarden” za lozinke i pristupne ključeve</value>
|
<value>3. Select "Bitwarden" to use for passwords and passkeys</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
||||||
<value>Tvoj pristupni ključ će biti spremljen u trezor</value>
|
<value>Your passkey will be saved to your Bitwarden vault</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>Tvoj pristupni ključ za {0} će biti spremljen u trezor</value>
|
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Remind me later</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Notice</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Pristupni ključ nije podržan za ovu aplikaciju</value>
|
<value>Passkeys not supported for this app</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
||||||
<value>Operacija pristupnog ključa nije uspjela jer preglednik nije privilegiran</value>
|
<value>Passkey operation failed because browser is not privileged</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
||||||
<value>Operacija pristupnog ključa nije uspjela jer se potpis preglednika ne podudara</value>
|
<value>Passkey operation failed because browser signature does not match</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
||||||
<value>Operacija pristupnog ključa nije uspjela jer nedostaju veze sa sredstvima (asset links)</value>
|
<value>Passkey operation failed because of missing asset links</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseAppNotFoundInAssetLinks" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseAppNotFoundInAssetLinks" xml:space="preserve">
|
||||||
<value>Operacija pristupnog ključa nije uspjela jer aplikacija nije pronađena u vezama sredstva (asset links)</value>
|
<value>Passkey operation failed because app not found in asset links</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
||||||
<value>Operacija pristupnog ključa nije uspjela jer nije bilo moguće provjeriti aplikaciju</value>
|
<value>Passkey operation failed because app could not be verified</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -239,7 +239,7 @@
|
|||||||
<value>Súgó és visszajelzés</value>
|
<value>Súgó és visszajelzés</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Hide" xml:space="preserve">
|
<data name="Hide" xml:space="preserve">
|
||||||
<value>Elrejtés</value>
|
<value>Elrejt</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">
|
||||||
@@ -2973,6 +2973,18 @@ Szeretnénk átváltani erre a fiókra?</value>
|
|||||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||||
<value>A belépőkulcs mentésre kerül a Bitwarden széfbe: {0}</value>
|
<value>A belépőkulcs mentésre kerül a Bitwarden széfbe: {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||||
|
<value>Megjegyzés: A nem hozzá nem rendelt szervezeti elemek már nem láthatók az Összes széf nézetben és csak az Adminisztrátori konzolon keresztül érhetők el. Rendeljük ezeket az elemeket egy gyűjteményhez az Adminisztrátor konzolból, hogy láthatóvá tegyük azokat.</value>
|
||||||
|
</data>
|
||||||
|
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||||
|
<value>2024. május 16-tól a nem hozzá rendelt szervezeti elemek többé nem lesznek láthatók az Összes széf nézetben és csak az Adminisztrátori konzolon keresztül érhetők el. Rendeljük ezeket az elemeket egy gyűjteményhez az Adminisztrátori konzolból, hogy láthatóvá tegyük azokat.</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemindMeLater" xml:space="preserve">
|
||||||
|
<value>Emlékeztetés később</value>
|
||||||
|
</data>
|
||||||
|
<data name="Notice" xml:space="preserve">
|
||||||
|
<value>Megjegyzés</value>
|
||||||
|
</data>
|
||||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||||
<value>Ennél az alkalmazásnál a belépőkulcsok nem támogatottak.</value>
|
<value>Ennél az alkalmazásnál a belépőkulcsok nem támogatottak.</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user