mirror of
https://github.com/bitwarden/mobile
synced 2026-01-24 21:33:23 +00:00
Compare commits
4 Commits
main
...
hotfix-pre
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d01cb27292 | ||
|
|
a39ff06b84 | ||
|
|
942566d7ec | ||
|
|
546a4077fb |
24
.github/CODEOWNERS
vendored
24
.github/CODEOWNERS
vendored
@@ -7,6 +7,15 @@
|
||||
# Default file owners
|
||||
* @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 ##
|
||||
|
||||
@@ -34,18 +43,3 @@ store/google/en
|
||||
|
||||
## Utils ##
|
||||
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
|
||||
|
||||
1
.github/renovate.json
vendored
1
.github/renovate.json
vendored
@@ -1,5 +1,4 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:base",
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
---
|
||||
name: Automatic responses
|
||||
on:
|
||||
issues:
|
||||
|
||||
19
.github/workflows/build-beta.yml
vendored
19
.github/workflows/build-beta.yml
vendored
@@ -1,3 +1,4 @@
|
||||
---
|
||||
name: Build Beta
|
||||
|
||||
on:
|
||||
@@ -47,9 +48,9 @@ jobs:
|
||||
runs-on: macos-14
|
||||
needs: setup
|
||||
env:
|
||||
_IOS_FOLDER_PATH: src/App/Platforms/iOS
|
||||
_APP_OUTPUT_NAME: App
|
||||
_APP_CI_OUTPUT_FILENAME: App_x64_Debug
|
||||
ios_folder_path: src/App/Platforms/iOS
|
||||
app_output_name: App
|
||||
app_ci_output_filename: App_x64_Debug
|
||||
steps:
|
||||
- name: Set XCode version
|
||||
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
|
||||
@@ -135,7 +136,7 @@ jobs:
|
||||
|
||||
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.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
|
||||
@@ -145,7 +146,7 @@ jobs:
|
||||
- name: Update Entitlements
|
||||
run: |
|
||||
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
|
||||
run: |
|
||||
@@ -245,8 +246,8 @@ jobs:
|
||||
ARCHIVE_PATH: ./${{ env.main_app_folder_path }}/bin/Debug/${{ env.target-net-version }}-ios/iossimulator-x64
|
||||
EXPORT_PATH: ./bitwarden-export
|
||||
run: |
|
||||
zip -r -q ${{ env._APP_CI_OUTPUT_FILENAME }}.app.zip $ARCHIVE_PATH
|
||||
mv ${{ env._APP_CI_OUTPUT_FILENAME }}.app.zip $EXPORT_PATH
|
||||
zip -r -q ${{ env.app_ci_output_filename }}.app.zip $ARCHIVE_PATH
|
||||
mv ${{ env.app_ci_output_filename }}.app.zip $EXPORT_PATH
|
||||
|
||||
- name: Show Bitwarden Export
|
||||
shell: bash
|
||||
@@ -276,8 +277,8 @@ jobs:
|
||||
- name: Upload .app file for Automation CI
|
||||
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
|
||||
with:
|
||||
name: ${{ env._APP_CI_OUTPUT_FILENAME }}.app.zip
|
||||
path: ./bitwarden-export/${{ 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
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Install AppCenter CLI
|
||||
|
||||
137
.github/workflows/build.yml
vendored
137
.github/workflows/build.yml
vendored
@@ -1,14 +1,19 @@
|
||||
---
|
||||
name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- "l10n_master"
|
||||
- "gh-pages"
|
||||
paths-ignore:
|
||||
- ".github/workflows/**"
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
main_app_folder_path: src/App
|
||||
main_app_project_path: src/App/App.csproj
|
||||
target-net-version: net8.0
|
||||
dotnet-version: '8.0.402'
|
||||
maui-workload-version: '8.0.402'
|
||||
|
||||
jobs:
|
||||
cloc:
|
||||
@@ -64,14 +69,9 @@ jobs:
|
||||
matrix:
|
||||
variant: ["prod", "qa"]
|
||||
env:
|
||||
_ANDROID_FOLDER_PATH: src\App\Platforms\Android
|
||||
_ANDROID_FOLDER_PATH_BASH: src/App/Platforms/Android
|
||||
android_folder_path: src\App\Platforms\Android
|
||||
android_folder_path_bash: src/App/Platforms/Android
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup NuGet
|
||||
uses: nuget/setup-nuget@a21f25cd3998bf370fde17e3f1b4c12c175172f9 # v2.0.0
|
||||
with:
|
||||
@@ -80,11 +80,7 @@ jobs:
|
||||
- name: Set up .NET
|
||||
uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4.0.1
|
||||
with:
|
||||
dotnet-version: ${{ env.dotnet-version }}
|
||||
|
||||
- name: Install MAUI Workload
|
||||
run: |
|
||||
dotnet workload install maui --version ${{ env.maui-workload-version }}
|
||||
dotnet-version: '8.0.x'
|
||||
|
||||
- name: Set up MSBuild
|
||||
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2.0.0
|
||||
@@ -107,6 +103,11 @@ jobs:
|
||||
echo "GitHub ref: $GITHUB_REF"
|
||||
echo "GitHub event: $GITHUB_EVENT"
|
||||
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Login to Azure - CI Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
with:
|
||||
@@ -120,9 +121,9 @@ jobs:
|
||||
mkdir -p $HOME/secrets
|
||||
|
||||
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 \
|
||||
--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 \
|
||||
--name play_creds.json --file $HOME/secrets/play_creds.json --output none
|
||||
shell: bash
|
||||
@@ -134,7 +135,7 @@ jobs:
|
||||
CONTAINER_NAME: mobile
|
||||
run: |
|
||||
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
|
||||
|
||||
- name: Increment version
|
||||
@@ -143,7 +144,7 @@ jobs:
|
||||
echo "##### Setting Android Version Code to $BUILD_NUMBER" | tee -a $GITHUB_STEP_SUMMARY
|
||||
|
||||
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
|
||||
|
||||
- name: Restore packages
|
||||
@@ -187,7 +188,7 @@ jobs:
|
||||
}
|
||||
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 `
|
||||
/p:AndroidPackageFormats=aab `
|
||||
/p:AndroidKeyStore=true `
|
||||
@@ -204,7 +205,7 @@ jobs:
|
||||
|
||||
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 `
|
||||
/p:AndroidKeyStore=true `
|
||||
/p:AndroidSigningKeyStore=$signingPlayKeyStore `
|
||||
@@ -289,15 +290,10 @@ jobs:
|
||||
name: F-Droid Build
|
||||
runs-on: windows-2022
|
||||
env:
|
||||
_ANDROID_FOLDER_PATH: src\App\Platforms\Android
|
||||
_ANDROID_FOLDER_PATH_BASH: src/App/Platforms/Android
|
||||
_ANDROID_MANIFEST_PATH: src/App/Platforms/Android/AndroidManifest.xml
|
||||
android_folder_path: src\App\Platforms\Android
|
||||
android_folder_path_bash: src/App/Platforms/Android
|
||||
android_manifest_path: src/App/Platforms/Android/AndroidManifest.xml
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup NuGet
|
||||
uses: nuget/setup-nuget@a21f25cd3998bf370fde17e3f1b4c12c175172f9 # v2.0.0
|
||||
with:
|
||||
@@ -306,11 +302,7 @@ jobs:
|
||||
- name: Set up .NET
|
||||
uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4.0.1
|
||||
with:
|
||||
dotnet-version: ${{ env.dotnet-version }}
|
||||
|
||||
- name: Install MAUI Workload
|
||||
run: |
|
||||
dotnet workload install maui --version ${{ env.maui-workload-version }}
|
||||
dotnet-version: '8.0.x'
|
||||
|
||||
- name: Set up MSBuild
|
||||
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2.0.0
|
||||
@@ -332,6 +324,9 @@ jobs:
|
||||
echo "GitHub ref: $GITHUB_REF"
|
||||
echo "GitHub event: $GITHUB_EVENT"
|
||||
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Login to Azure - CI Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
with:
|
||||
@@ -344,7 +339,7 @@ jobs:
|
||||
FILE: app_fdroid-keystore.jks
|
||||
run: |
|
||||
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
|
||||
|
||||
- name: Increment version
|
||||
@@ -353,14 +348,14 @@ jobs:
|
||||
echo "##### Setting F-Droid Version Code to $BUILD_NUMBER" | tee -a $GITHUB_STEP_SUMMARY
|
||||
|
||||
sed -i "s/android:versionCode=\"1\"/android:versionCode=\"$BUILD_NUMBER\"/" \
|
||||
./${{ env._ANDROID_MANIFEST_PATH }}
|
||||
./${{ env.android_manifest_path }}
|
||||
shell: bash
|
||||
|
||||
- name: Clean for F-Droid
|
||||
run: |
|
||||
$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"
|
||||
|
||||
@@ -393,7 +388,7 @@ jobs:
|
||||
|
||||
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 `
|
||||
/p:AndroidKeyStore=true `
|
||||
/p:AndroidSigningKeyStore=$signingFdroidKeyStore `
|
||||
@@ -433,19 +428,14 @@ jobs:
|
||||
runs-on: macos-14
|
||||
needs: setup
|
||||
env:
|
||||
_IOS_FOLDER_PATH: src/App/Platforms/iOS
|
||||
_APP_OUTPUT_NAME: App
|
||||
_APP_CI_OUTPUT_FILENAME: App_x64_Debug
|
||||
ios_folder_path: src/App/Platforms/iOS
|
||||
app_output_name: App
|
||||
app_ci_output_filename: App_x64_Debug
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
submodules: 'true'
|
||||
|
||||
- name: Set XCode version
|
||||
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
|
||||
with:
|
||||
xcode-version: 15.4
|
||||
xcode-version: 15.1
|
||||
|
||||
- name: Setup NuGet
|
||||
uses: nuget/setup-nuget@a21f25cd3998bf370fde17e3f1b4c12c175172f9 # v2.0.0
|
||||
@@ -455,10 +445,12 @@ jobs:
|
||||
- name: Set up .NET
|
||||
uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4.0.1
|
||||
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
|
||||
run: dotnet workload install maui --version ${{ env.maui-workload-version }}
|
||||
run: dotnet workload install maui --ignore-failed-sources
|
||||
|
||||
- name: Print environment
|
||||
run: |
|
||||
@@ -467,6 +459,11 @@ jobs:
|
||||
echo "GitHub ref: $GITHUB_REF"
|
||||
echo "GitHub event: $GITHUB_EVENT"
|
||||
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
submodules: 'true'
|
||||
|
||||
- name: Login to Azure - CI Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
with:
|
||||
@@ -515,7 +512,7 @@ jobs:
|
||||
BUILD_NUMBER=$((8000 + $GITHUB_RUN_NUMBER))
|
||||
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.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
|
||||
@@ -525,7 +522,7 @@ jobs:
|
||||
- name: Update Entitlements
|
||||
run: |
|
||||
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
|
||||
run: |
|
||||
@@ -609,8 +606,8 @@ jobs:
|
||||
ARCHIVE_PATH: ./${{ env.main_app_folder_path }}/bin/Debug/${{ env.target-net-version }}-ios/iossimulator-x64
|
||||
EXPORT_PATH: ./bitwarden-export
|
||||
run: |
|
||||
zip -r -q ${{ env._APP_CI_OUTPUT_FILENAME }}.app.zip $ARCHIVE_PATH
|
||||
mv ${{ env._APP_CI_OUTPUT_FILENAME }}.app.zip $EXPORT_PATH
|
||||
zip -r -q ${{ env.app_ci_output_filename }}.app.zip $ARCHIVE_PATH
|
||||
mv ${{ env.app_ci_output_filename }}.app.zip $EXPORT_PATH
|
||||
|
||||
- name: Copy all dSYMs files to upload
|
||||
env:
|
||||
@@ -635,8 +632,8 @@ jobs:
|
||||
- name: Upload .app file for Automation CI
|
||||
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
|
||||
with:
|
||||
name: ${{ env._APP_CI_OUTPUT_FILENAME }}.app.zip
|
||||
path: ./bitwarden-export/${{ 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
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Install AppCenter CLI
|
||||
@@ -670,27 +667,19 @@ jobs:
|
||||
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" \;
|
||||
|
||||
- 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
|
||||
if: |
|
||||
(github.ref == 'refs/heads/main'
|
||||
(github.ref == 'refs/heads/master'
|
||||
&& needs.setup.outputs.rc_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/hotfix-rc'
|
||||
env:
|
||||
APPLE_ID_USERNAME: ${{ secrets.APPLE_ID_USERNAME }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
run: |
|
||||
xcrun altool \
|
||||
--validate-app \
|
||||
--type ios \
|
||||
--file "./bitwarden-export/Bitwarden.ipa" \
|
||||
--apiKey "U362LJ87AA" \
|
||||
--apiIssuer ${{ secrets.APP_STORE_CONNECT_TEAM_ISSUER }}
|
||||
xcrun altool --validate-app --type ios --file "./bitwarden-export/Bitwarden.ipa" \
|
||||
--username "$APPLE_ID_USERNAME" --password "$APPLE_ID_PASSWORD"
|
||||
|
||||
- name: Deploy to App Store
|
||||
if: |
|
||||
@@ -699,13 +688,13 @@ jobs:
|
||||
&& 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'
|
||||
env:
|
||||
APPLE_ID_USERNAME: ${{ secrets.APPLE_ID_USERNAME }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
run: |
|
||||
xcrun altool \
|
||||
--upload-app \
|
||||
--type ios \
|
||||
--file "./bitwarden-export/Bitwarden.ipa" \
|
||||
--apiKey "U362LJ87AA" \
|
||||
--apiIssuer ${{ secrets.APP_STORE_CONNECT_TEAM_ISSUER }}
|
||||
xcrun altool --upload-app --type ios --file "./bitwarden-export/Bitwarden.ipa" \
|
||||
--username "$APPLE_ID_USERNAME" --password "$APPLE_ID_PASSWORD"
|
||||
|
||||
|
||||
crowdin-push:
|
||||
name: Crowdin Push
|
||||
|
||||
1
.github/workflows/cleanup-rc-branch.yml
vendored
1
.github/workflows/cleanup-rc-branch.yml
vendored
@@ -1,3 +1,4 @@
|
||||
---
|
||||
name: Cleanup RC Branch
|
||||
|
||||
on:
|
||||
|
||||
18
.github/workflows/crowdin-pull.yml
vendored
18
.github/workflows/crowdin-pull.yml
vendored
@@ -1,27 +1,21 @@
|
||||
---
|
||||
name: Crowdin Sync
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs: {}
|
||||
schedule:
|
||||
- cron: '0 0 * * 5'
|
||||
|
||||
jobs:
|
||||
crowdin-sync:
|
||||
name: Autosync
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-22.04
|
||||
env:
|
||||
_CROWDIN_PROJECT_ID: "269690"
|
||||
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
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
token: ${{ steps.app-token.outputs.token }}
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Login to Azure - CI Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
@@ -38,7 +32,7 @@ jobs:
|
||||
- name: Download translations
|
||||
uses: crowdin/github-action@61ac8b980551f674046220c3e104bddae2916ac5 # v2.0.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
||||
with:
|
||||
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
|
||||
|
||||
on:
|
||||
|
||||
4
.github/workflows/pr-labeler.yml
vendored
4
.github/workflows/pr-labeler.yml
vendored
@@ -1,3 +1,4 @@
|
||||
---
|
||||
name: "Pull Request Labeler"
|
||||
|
||||
on:
|
||||
@@ -11,7 +12,6 @@ jobs:
|
||||
pull-requests: write
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Label PR
|
||||
uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0
|
||||
- uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0
|
||||
with:
|
||||
sync-labels: true
|
||||
|
||||
1
.github/workflows/release.yml
vendored
1
.github/workflows/release.yml
vendored
@@ -1,3 +1,4 @@
|
||||
---
|
||||
name: Release
|
||||
run-name: Release ${{ inputs.release_type }}
|
||||
|
||||
|
||||
1
.github/workflows/stale-bot.yml
vendored
1
.github/workflows/stale-bot.yml
vendored
@@ -1,3 +1,4 @@
|
||||
---
|
||||
name: 'Close stale issues and PRs'
|
||||
on:
|
||||
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
|
||||
|
||||
on:
|
||||
|
||||
1
.github/workflows/version-bump.yml
vendored
1
.github/workflows/version-bump.yml
vendored
@@ -1,3 +1,4 @@
|
||||
---
|
||||
name: Version Bump
|
||||
|
||||
on:
|
||||
|
||||
16
.gitignore
vendored
16
.gitignore
vendored
@@ -296,11 +296,17 @@ iOSInjectionProject/
|
||||
timeline.xctimeline
|
||||
playground.xcworkspace
|
||||
|
||||
# xcode / swift package manager - used by the MessagePack lib
|
||||
/.build
|
||||
/Packages
|
||||
/*.xcodeproj
|
||||
.swiftpm
|
||||
# Swift Package Manager
|
||||
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
|
||||
# Packages/
|
||||
# Package.pins
|
||||
# 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
|
||||
# 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>
|
||||
<ReleaseCodesignKey>iPhone Distribution</ReleaseCodesignKey>
|
||||
<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>
|
||||
|
||||
<!-- Uncomment this when Unit Testing-->
|
||||
<!-- <CustomConstants>UT</CustomConstants> -->
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ The Bitwarden mobile application is written in C# using .NET MAUI.
|
||||
|
||||
# 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!
|
||||
|
||||
|
||||
@@ -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)
|
||||
]
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:versionCode="1" android:versionName="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.7.2" android:installLocation="internalOnly" package="com.x8bit.bitwarden">
|
||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="34" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.NFC" />
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.8bit.bitwarden</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2024.10.111</string>
|
||||
<string>2024.7.2</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>CFBundleIconName</key>
|
||||
|
||||
@@ -446,7 +446,7 @@
|
||||
<value>تغيير البريد الإلكتروني</value>
|
||||
</data>
|
||||
<data name="ChangeEmailConfirmation" xml:space="preserve">
|
||||
<value>يمكنك تغيير عنوان بريدك الإلكتروني من خزانة الويب على bitwarden.com. هل تريد زيارة الموقع الآن؟</value>
|
||||
<value>يمكنك تغيير عنوان بريدك الإلكتروني من خزنة الويب على bitwarden.com. هل تريد زيارة الموقع الآن؟</value>
|
||||
</data>
|
||||
<data name="ChangeMasterPassword" xml:space="preserve">
|
||||
<value>تغيير كلمة المرور الرئيسية</value>
|
||||
@@ -550,20 +550,20 @@
|
||||
<value>فورًا</value>
|
||||
</data>
|
||||
<data name="VaultTimeout" xml:space="preserve">
|
||||
<value>مهلة الخزانة</value>
|
||||
<value>مهلة الخزنة</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutAction" xml:space="preserve">
|
||||
<value>إجراء مهلة الخزانة</value>
|
||||
<value>إجراء مهلة الخزنة</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
||||
<value>سيؤدي تسجيل الخروج إلى إزالة جميع الوصول إلى الخزانة الخاصة بك ويتطلب المصادقة عبر الإنترنت بعد انتهاء المهلة. هل أنت متأكد من أنك تريد استخدام هذا الإعداد؟</value>
|
||||
<value>سيؤدي تسجيل الخروج إلى إزالة جميع الوصول إلى الخزنة الخاصة بك ويتطلب المصادقة عبر الإنترنت بعد انتهاء المهلة. هل أنت متأكد من أنك تريد استخدام هذا الإعداد؟</value>
|
||||
</data>
|
||||
<data name="LoggingIn" xml:space="preserve">
|
||||
<value>جارِ تسجيل الدخول...</value>
|
||||
<comment>Message shown when interacting with the server</comment>
|
||||
</data>
|
||||
<data name="LoginOrCreateNewAccount" xml:space="preserve">
|
||||
<value>قم بتسجيل الدخول أو إنشاء حساب جديد للوصول إلى خزانتك الآمنة.</value>
|
||||
<value>قم بتسجيل الدخول أو إنشاء حساب جديد للوصول إلى خزنتك الآمنة.</value>
|
||||
</data>
|
||||
<data name="Manage" xml:space="preserve">
|
||||
<value>إدارة</value>
|
||||
@@ -572,7 +572,7 @@
|
||||
<value>تأكيد كلمة المرور غير صحيح.</value>
|
||||
</data>
|
||||
<data name="MasterPasswordDescription" xml:space="preserve">
|
||||
<value>كلمة المرور الرئيسية هي كلمة المرور المستخدمة للوصول إلى الخزانة الخاصة بك. من المهم جدا ً ألا تنسى ذلك. لا توجد طريقة للعثور عليها إذا نسيت.</value>
|
||||
<value>كلمة المرور الرئيسية هي كلمة المرور المستخدمة للوصول إلى الخزنة الخاصة بك. من المهم جدا ً ألا تنسى ذلك. لا توجد طريقة للعثور عليها إذا نسيت.</value>
|
||||
</data>
|
||||
<data name="MasterPasswordHint" xml:space="preserve">
|
||||
<value>فهرس كلمة المرور الرئيسية (اختياري)</value>
|
||||
@@ -604,13 +604,13 @@
|
||||
<value>تم إنشاء عنصر جديد.</value>
|
||||
</data>
|
||||
<data name="NoFavorites" xml:space="preserve">
|
||||
<value>لا توجد عناصر مفضلة في خزانتك.</value>
|
||||
<value>لا توجد عناصر مفضلة في خزنتك.</value>
|
||||
</data>
|
||||
<data name="NoItems" xml:space="preserve">
|
||||
<value>لا توجد عناصر في خزانتك.</value>
|
||||
<value>لا توجد عناصر في خزنتك.</value>
|
||||
</data>
|
||||
<data name="NoItemsTap" xml:space="preserve">
|
||||
<value>لا توجد في خزانتك عناصر لهذا الموقع/التطبيق. انقر لإضافة واحد.</value>
|
||||
<value>لا توجد في خزنتك عناصر لهذا الموقع/التطبيق. انقر لإضافة واحد.</value>
|
||||
</data>
|
||||
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
|
||||
<value>لا يحتوي هذا المعرّف على اسم مستخدم أو كلمة مرور تم تكوينها.</value>
|
||||
@@ -644,7 +644,7 @@
|
||||
<value>هل أنت متأكد من أنك تريد سحق كلمة المرور الموجودة؟</value>
|
||||
</data>
|
||||
<data name="PushNotificationAlert" xml:space="preserve">
|
||||
<value>Bitwarden يحافظ تلقائيا على خزانتك في المزامنة باستخدام دفع الإخطارات. للحصول على أفضل تجربة ممكنة، يرجى اختيار "سماح" على مربع الحوار التالي عند طلب السماح بدفع الإشعارات.</value>
|
||||
<value>bitwarden تلقائيا يحافظ على خزنتك في المزامنة باستخدام دفع الإخطارات. للحصول على أفضل تجربة ممكنة، يرجى اختيار "موافق" على مربع الحوار التالي (تفعيل دفع الإخطارات ).</value>
|
||||
<comment>Push notifications for apple products</comment>
|
||||
</data>
|
||||
<data name="RateTheApp" xml:space="preserve">
|
||||
@@ -660,7 +660,7 @@
|
||||
<value>إعادة إدخال كلمة المرور الرئيسية</value>
|
||||
</data>
|
||||
<data name="SearchVault" xml:space="preserve">
|
||||
<value>البحث في الخزانة</value>
|
||||
<value>البحث في الخزنة</value>
|
||||
</data>
|
||||
<data name="Security" xml:space="preserve">
|
||||
<value>الأمان</value>
|
||||
@@ -695,7 +695,7 @@
|
||||
<value>فشل المزامنة.</value>
|
||||
</data>
|
||||
<data name="SyncVaultNow" xml:space="preserve">
|
||||
<value>مزامنة الخزانة الآن</value>
|
||||
<value>مزامنة الخزنة الآن</value>
|
||||
</data>
|
||||
<data name="TouchID" xml:space="preserve">
|
||||
<value>Touch ID معرف اتصال البصمة</value>
|
||||
@@ -721,7 +721,7 @@
|
||||
<value>عرض العنصر</value>
|
||||
</data>
|
||||
<data name="WebVault" xml:space="preserve">
|
||||
<value>خزانة الويب Bitwarden</value>
|
||||
<value>خزنة الويب Bitwarden</value>
|
||||
</data>
|
||||
<data name="Lost2FAApp" xml:space="preserve">
|
||||
<value>هل تم فقدان تطبيق المصادقة؟</value>
|
||||
@@ -744,14 +744,14 @@
|
||||
<comment>This is used for the autofill service. ex. "Logins for twitter.com"</comment>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="BitwardenAutofillServiceOverlay" xml:space="preserve">
|
||||
<value>عند تحديد حقل الإدخال ومشاهدة تراكب الملء التلقائي لـ Bitwarden ، يمكنك النقر عليه لتشغيل خدمة الملء التلقائي.</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
|
||||
<value>اضغط على هذا الإشعار لملء معلومات تسجيل الدخول تلقائيًا من خزانتك.</value>
|
||||
<value>اضغط على هذا الإشعار لملء معلومات تسجيل الدخول تلقائيًا من خزنتك.</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillServiceOpenAccessibilitySettings" xml:space="preserve">
|
||||
<value>فتح إعدادات إمكانية الوصول</value>
|
||||
@@ -778,7 +778,7 @@
|
||||
<value>الحالة</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillServiceAlert2" xml:space="preserve">
|
||||
<value>أسهل طريقة لإضافة تسجيلات دخول جديدة إلى خزانتك هي من خدمة التعبئة التلقائية Bitwarden تعرف على المزيد حول استخدام خدمة الملء التلقائي لـ Bitwarden عن طريق الانتقال إلى شاشة "إعدادات".</value>
|
||||
<value>أسهل طريقة لإضافة تسجيلات دخول جديدة إلى خزنتك هي من خدمة التعبئة التلقائية Bitwarden تعرف على المزيد حول استخدام خدمة الملء التلقائي لـ Bitwarden عن طريق الانتقال إلى شاشة "إعدادات".</value>
|
||||
</data>
|
||||
<data name="Autofill" xml:space="preserve">
|
||||
<value>التعبئة التلقائية</value>
|
||||
@@ -949,7 +949,7 @@
|
||||
<value>لا يمكنك استخدام هذه الميزة حتى تقوم بتحديث مفتاح التشفير الخاص بك.</value>
|
||||
</data>
|
||||
<data name="EncryptionKeyMigrationRequiredDescriptionLong" xml:space="preserve">
|
||||
<value>مطلوب ترحيل مفتاح التشفير. الرجاء تسجيل الدخول بواسطة خزانة الويب لتحديث مفتاح التشفير الخاص بك.</value>
|
||||
<value>مطلوب ترحيل مفتاح التشفير. الرجاء تسجيل الدخول بواسطة مخزن الويب لتحديث مفتاح التشفير الخاص بك.</value>
|
||||
</data>
|
||||
<data name="LearnMore" xml:space="preserve">
|
||||
<value>اعرف المزيد</value>
|
||||
@@ -984,10 +984,10 @@
|
||||
<value>رابط الخادم</value>
|
||||
</data>
|
||||
<data name="WebVaultUrl" xml:space="preserve">
|
||||
<value>رابط خادم خزانة الويب</value>
|
||||
<value>رابط خادم مخزن الويب</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
|
||||
<value>اضغط على هذا الإشعار لعرض العناصر من الخزانة الخاصة بك.</value>
|
||||
<value>اضغط على هذا الإشعار لعرض العناصر من الخزنة الخاصة بك.</value>
|
||||
</data>
|
||||
<data name="CustomFields" xml:space="preserve">
|
||||
<value>حقول مخصصة</value>
|
||||
@@ -1149,10 +1149,10 @@
|
||||
<value>ملء تلقائي باستخدام Bitwarden</value>
|
||||
</data>
|
||||
<data name="VaultIsLocked" xml:space="preserve">
|
||||
<value>الخزانة مقفلة</value>
|
||||
<value>الخزنة مقفلة</value>
|
||||
</data>
|
||||
<data name="GoToMyVault" xml:space="preserve">
|
||||
<value>اذهب لخزانتي</value>
|
||||
<value>اذهب لخزنتي</value>
|
||||
</data>
|
||||
<data name="Collections" xml:space="preserve">
|
||||
<value>المختارات</value>
|
||||
@@ -1301,7 +1301,7 @@
|
||||
<value>نوصي بتعطيل أي تطبيقات أخرى من تطبيقات التعبئة التلقائية تحت الإعدادات إذا كنت لا تخطط لاستخدامها.</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillDescription" xml:space="preserve">
|
||||
<value>الوصول إلى الخزانة الخاصة بك مباشرة من لوحة المفاتيح الخاصة بك لملء كلمات المرور تلقائياً بسرعة.</value>
|
||||
<value>الوصول إلى الخزن, الخاص, بك مباشرة من لوحة المفاتيح الخاصة بك لملء كلمات المرور تلقائياً بسرعة.</value>
|
||||
</data>
|
||||
<data name="AutofillTurnOn" xml:space="preserve">
|
||||
<value>لتمكين التعبئة التلقائية لكلمة المرور على جهازك، اتبع هذه التعليمات:</value>
|
||||
@@ -1325,7 +1325,7 @@
|
||||
<value>تعبئة تلقائية لكلمة المرور</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillAlert2" xml:space="preserve">
|
||||
<value>أسهل طريقة لإضافة تسجيلات دخول جديدة إلى خزانتك هي من خدمة التعبئة التلقائية Bitwarden. تعرف على المزيد حول استخدام خدمة الملء التلقائي لـ Bitwarden عن طريق الانتقال إلى شاشة "إعدادات".</value>
|
||||
<value>أسهل طريقة لإضافة تسجيلات دخول جديدة إلى خزنتك هي من خدمة التعبئة التلقائية Bitwarden. تعرف على المزيد حول استخدام خدمة الملء التلقائي لـ Bitwarden عن طريق الانتقال إلى شاشة "إعدادات".</value>
|
||||
</data>
|
||||
<data name="InvalidEmail" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="LearnOrgConfirmation" xml:space="preserve">
|
||||
<value>يسمح لك Bitwarden بمشاركة عناصر خزانتك مع الآخرين باستخدام حساب المؤسسة. هل ترغب في زيارة موقع bitwarden.com لمعرفة المزيد؟</value>
|
||||
<value>يسمح لك Bitwarden بمشاركة عناصر خزنتك مع الآخرين باستخدام حساب المؤسسة. هل ترغب في زيارة موقع bitwarden.com لمعرفة المزيد؟</value>
|
||||
</data>
|
||||
<data name="ExportVault" xml:space="preserve">
|
||||
<value>تصدير الخزانة</value>
|
||||
<value>تصدير الخزنة</value>
|
||||
</data>
|
||||
<data name="LockNow" xml:space="preserve">
|
||||
<value>إقفل الآن</value>
|
||||
@@ -1496,13 +1496,13 @@
|
||||
<comment>ex: Logged in as user@example.com on bitwarden.com.</comment>
|
||||
</data>
|
||||
<data name="VaultLockedMasterPassword" xml:space="preserve">
|
||||
<value>خزانتك مقفلة. تحقق من كلمة المرور الرئيسية للمتابعة.</value>
|
||||
<value>خزنتك مقفلة. تحقق من كلمة المرور الرئيسية للمتابعة.</value>
|
||||
</data>
|
||||
<data name="VaultLockedPIN" xml:space="preserve">
|
||||
<value>خزانتك مقفلة. تحقق من رمز PIN الخاص بك للمتابعة.</value>
|
||||
<value>خزنتك مقفلة. تحقق من رمز PIN الخاص بك للمتابعة.</value>
|
||||
</data>
|
||||
<data name="VaultLockedIdentity" xml:space="preserve">
|
||||
<value>خزانتك مقفلة. تحقق من هويتك للمتابعة.</value>
|
||||
<value>خزنتك مقفلة. تحقق من هويتك للمتابعة.</value>
|
||||
</data>
|
||||
<data name="Dark" xml:space="preserve">
|
||||
<value>داكن</value>
|
||||
@@ -1586,13 +1586,13 @@
|
||||
<value>اطلب إضافة تسجيل الدخول</value>
|
||||
</data>
|
||||
<data name="AskToAddLoginDescription" xml:space="preserve">
|
||||
<value>اطلب إضافة عنصر إذا لم يتم العثور عليه في خزانتك.</value>
|
||||
<value>اطلب إضافة عنصر إذا لم يتم العثور عليه في خزنتك.</value>
|
||||
</data>
|
||||
<data name="OnRestart" xml:space="preserve">
|
||||
<value>عند إعادة تشغيل التطبيق</value>
|
||||
</data>
|
||||
<data name="AutofillServiceNotEnabled" xml:space="preserve">
|
||||
<value>التعبئة التلقائية تجعل من السهل الوصول بشكل آمن إلى خزانة Bitwarden الخاصة بك من مواقع الويب والتطبيقات الأخرى. يبدو أنك لم تقم بتمكين خدمة التعبئة التلقائية لـ Bitwarden. تمكين التعبئة التلقائية لـ Bitwarden من شاشة "الإعدادات".</value>
|
||||
<value>التعبئة التلقائية تجعل من السهل الوصول بشكل آمن إلى خزنة Bitwarden الخاصة بك من مواقع الويب والتطبيقات الأخرى. يبدو أنك لم تقم بتمكين خدمة التعبئة التلقائية لـ Bitwarden. تمكين التعبئة التلقائية لـ Bitwarden من شاشة "الإعدادات".</value>
|
||||
</data>
|
||||
<data name="ThemeAppliedOnRestart" xml:space="preserve">
|
||||
<value>سيتم تطبيق تغييرات السمة الخاصة بك عند إعادة تشغيل التطبيق.</value>
|
||||
@@ -1650,7 +1650,7 @@
|
||||
<value>صيغة الملف</value>
|
||||
</data>
|
||||
<data name="ExportVaultMasterPasswordDescription" xml:space="preserve">
|
||||
<value>أدخل كلمة المرور الرئيسية لتصدير بيانات خزانتك.</value>
|
||||
<value>أدخل كلمة المرور الرئيسية لتصدير بيانات خزنتك.</value>
|
||||
</data>
|
||||
<data name="SendVerificationCodeToEmail" xml:space="preserve">
|
||||
<value>إرسال رمز التحقق إلى بريدك الإلكتروني</value>
|
||||
@@ -1662,7 +1662,7 @@
|
||||
<value>قم بتأكيد هويتك للمتابعة.</value>
|
||||
</data>
|
||||
<data name="ExportVaultWarning" xml:space="preserve">
|
||||
<value>يحتوي هذا التصدير على بيانات خزانتك بتنسيق غير مشفر. لا يجب عليك تخزين أو إرسال الملف الذي تم تصديره عبر قنوات غير آمنة (مثل البريد الإلكتروني). احذفه مباشرة بعد انتهائك من استخدامه.</value>
|
||||
<value>يحتوي هذا التصدير على بيانات خزنتك بتنسيق غير مشفر. لا يجب عليك تخزين أو إرسال الملف الذي تم تصديره عبر قنوات غير آمنة (مثل البريد الإلكتروني). احذفه مباشرة بعد انتهائك من استخدامه.</value>
|
||||
</data>
|
||||
<data name="EncExportKeyWarning" xml:space="preserve">
|
||||
<value>يقوم هذا التصدير بتشفير بياناتك باستخدام مفتاح تشفير حسابك. إذا قمت بتدوير مفتاح تشفير حسابك يجب عليك التصدير مرة أخرى لأنك لن تتمكن من فك تشفير ملف التصدير هذا.</value>
|
||||
@@ -1671,17 +1671,17 @@
|
||||
<value>مفاتيح تشفير الحساب فريدة من نوعها لكل حساب مستخدم Bitwarden، لذلك لا يمكنك استيراد تصدير مشفر إلى حساب آخر.</value>
|
||||
</data>
|
||||
<data name="ExportVaultConfirmationTitle" xml:space="preserve">
|
||||
<value>تأكيد تصدير الخزانة</value>
|
||||
<value>تأكيد تصدير الخزنة</value>
|
||||
<comment>Title for the alert to confirm vault exports.</comment>
|
||||
</data>
|
||||
<data name="Warning" xml:space="preserve">
|
||||
<value>تحذير</value>
|
||||
</data>
|
||||
<data name="ExportVaultFailure" xml:space="preserve">
|
||||
<value>كانت هناك مشكلة في تصدير خزانتك. إذا استمرت المشكلة، ستحتاج إلى التصدير من خزانة الويب.</value>
|
||||
<value>كانت هناك مشكلة في تصدير خزنتك. إذا استمرت المشكلة، ستحتاج إلى التصدير من خزانة الويب.</value>
|
||||
</data>
|
||||
<data name="ExportVaultSuccess" xml:space="preserve">
|
||||
<value>تم تصدير الخزانة بنجاح</value>
|
||||
<value>تم تصدير الخزنة بنجاح</value>
|
||||
</data>
|
||||
<data name="Clone" xml:space="preserve">
|
||||
<value>استنساخ</value>
|
||||
@@ -1695,7 +1695,7 @@
|
||||
<comment>Button text for an open operation (verb).</comment>
|
||||
</data>
|
||||
<data name="UnableToSaveAttachment" xml:space="preserve">
|
||||
<value>كانت هناك مشكلة في حفظ هذا المرفق. إذا استمرت المشكلة ، يمكنك حفظها من خزانة الويب.</value>
|
||||
<value>كانت هناك مشكلة في حفظ هذا المرفق. إذا استمرت المشكلة ، يمكنك حفظها من خزنة الويب.</value>
|
||||
</data>
|
||||
<data name="SaveAttachmentSuccess" xml:space="preserve">
|
||||
<value>تم حفظ المرفق بنجاح</value>
|
||||
@@ -1756,7 +1756,7 @@
|
||||
<value>تمكين المزامنة عند التحديث</value>
|
||||
</data>
|
||||
<data name="EnableSyncOnRefreshDescription" xml:space="preserve">
|
||||
<value>مزامنة الخزانة مع إيماءة السحب لأسفل.</value>
|
||||
<value>مزامنة الخزنة مع إيماءة السحب لأسفل.</value>
|
||||
</data>
|
||||
<data name="LogInSso" xml:space="preserve">
|
||||
<value>تسجيل الدخول الفردي للمؤسسة</value>
|
||||
@@ -1774,7 +1774,7 @@
|
||||
<value>تعيين كلمة المرور الرئيسية</value>
|
||||
</data>
|
||||
<data name="SetMasterPasswordSummary" xml:space="preserve">
|
||||
<value>من أجل إكمال تسجيل الدخول باستخدام SSO، يرجى تعيين كلمة مرور رئيسية للوصول وحماية خزانتك.</value>
|
||||
<value>من أجل إكمال تسجيل الدخول باستخدام SSO، يرجى تعيين كلمة مرور رئيسية للوصول وحماية خزنتك.</value>
|
||||
</data>
|
||||
<data name="MasterPasswordPolicyInEffect" xml:space="preserve">
|
||||
<value>1 - تتطلب سياسة واحدة أو أكثر من سياسات المؤسسة كلمة مرورك الرئيسية لتلبية المتطلبات التالية:</value>
|
||||
@@ -2138,16 +2138,16 @@
|
||||
<value>هذه المؤسسة لديها سياسة الشركة التي ستقوم تلقائياً بتسجيلك في إعادة تعيين كلمة المرور. التسجيل سيسمح لمسؤولي المؤسسة بتغيير كلمة المرور الرئيسية الخاصة بك.</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
|
||||
<value>سياسات مؤسستك تؤثر على مهلة الخزانة الخاص بك. الحد الأقصى المسموح به لمهلة الخزانة هو {0} ساعة و {1} دقيقة.</value>
|
||||
<value>سياسات مؤسستك تؤثر على مهلة الخزنة الخاص بك. الحد الأقصى المسموح به لمهلة الخزنة هو {0} ساعة و {1} دقيقة</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
||||
<value>سياسات مؤسستك تؤثر على مهلة خزانتك. الحد الأقصى المسموح به لمهلة الخزنة هو {0} ساعة(ساعات) و {1} دقيقة(دقائق). يتم تعيين إجراء مهلة المخزن الخاص بك إلى {2}.</value>
|
||||
<value>سياسات مؤسستك تؤثر على مهلة خزنتك. الحد الأقصى المسموح به لمهلة الخزنة هو {0} ساعة(ساعات) و {1} دقيقة(دقائق). يتم تعيين إجراء مهلة المخزن الخاص بك إلى {2}.</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
|
||||
<value>سياسات مؤسستك قامت بتعيين إجراء مهلة خزانتك إلى {0}.</value>
|
||||
<value>سياسات مؤسستك قامت بتعيين إجراء مهلة خزنتك إلى {0}.</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutToLarge" xml:space="preserve">
|
||||
<value>مهلة خزانتك تتجاوز القيود التي تضعها مؤسستك.</value>
|
||||
<value>مهلة خزنتك تتجاوز القيود التي تضعها مؤسستك.</value>
|
||||
</data>
|
||||
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
|
||||
<value>واحدة أو أكثر من سياسات المؤسسة تمنعك من تصدير خزانتك الشخصية.</value>
|
||||
@@ -2258,16 +2258,16 @@
|
||||
<value>كلمة المرور مخفية، انقر للإظهار.</value>
|
||||
</data>
|
||||
<data name="FilterByVault" xml:space="preserve">
|
||||
<value>تصفية العناصر حسب الخزانات</value>
|
||||
<value>تصفية العناصر حسب الخزنات</value>
|
||||
</data>
|
||||
<data name="AllVaults" xml:space="preserve">
|
||||
<value>جميع الخزانات</value>
|
||||
<value>جميع الخزنات</value>
|
||||
</data>
|
||||
<data name="Vaults" xml:space="preserve">
|
||||
<value>الخزانات</value>
|
||||
<value>الخزنات</value>
|
||||
</data>
|
||||
<data name="VaultFilterDescription" xml:space="preserve">
|
||||
<value>الخزانة: {0}</value>
|
||||
<value>الخزنة: {0}</value>
|
||||
</data>
|
||||
<data name="All" xml:space="preserve">
|
||||
<value>الكل</value>
|
||||
@@ -2307,7 +2307,7 @@
|
||||
حدد إضافة TOTP لتخزين المفتاح بأمان</value>
|
||||
</data>
|
||||
<data name="NeverLockWarning" xml:space="preserve">
|
||||
<value>تعيين خيارات قفل الخاص بك إلى "مطلقا" يبقي خزانتك متاحةً لأي شخص لديه حق الوصول إلى جهازك. إذا كنت تستخدم هذا الخيار، يجب أن تتأكد من الحفاظ على حماية جهازك بشكل صحيح.</value>
|
||||
<value>تعيين خيارات قفل الخاص بك إلى "مطلقا" يبقي خزنتك متاحةً لأي شخص لديه حق الوصول إلى جهازك. إذا كنت تستخدم هذا الخيار، يجب أن تتأكد من الحفاظ على حماية جهازك بشكل صحيح.</value>
|
||||
</data>
|
||||
<data name="EnvironmentPageUrlsError" xml:space="preserve">
|
||||
<value>واحد أو أكثر من عناوين URL التي تم إدخالها غير صالحة. الرجاء مراجعتها ومحاولة الحفظ مرة أخرى.</value>
|
||||
@@ -2516,7 +2516,7 @@
|
||||
<value>تم إرسال إشعار إلى جهازك.</value>
|
||||
</data>
|
||||
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
|
||||
<value>الرجاء التأكد من أن الخزانة الخاصة بك غير مقفلة وأن عبارة بصمة الإصبع تتطابق على الجهاز الآخر.</value>
|
||||
<value>الرجاء التأكد من أن الخزنة الخاصة بك غير مقفلة وأن عبارة بصمة الإصبع تتطابق على الجهاز الآخر.</value>
|
||||
</data>
|
||||
<data name="ResendNotification" xml:space="preserve">
|
||||
<value>إعادة إرسال الإشعار</value>
|
||||
@@ -2627,7 +2627,7 @@
|
||||
<value>المنطقة</value>
|
||||
</data>
|
||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||
<value>كلمة المرور الرئيسية الخاصة بك لا تفي بواحدة أو أكثر من سياسات مؤسستك. من أجل الوصول إلى الخزانة، يجب عليك تحديث كلمة المرور الرئيسية الآن. سيتم تسجيل خروجك من الجلسة الحالية، مما يتطلب منك تسجيل الدخول مرة أخرى. وقد تظل الجلسات النشطة على أجهزة أخرى نشطة لمدة تصل إلى ساعة واحدة.</value>
|
||||
<value>كلمة المرور الرئيسية الخاصة بك لا تفي بواحدة أو أكثر من سياسات مؤسستك. من أجل الوصول إلى الخزنة، يجب عليك تحديث كلمة المرور الرئيسية الآن. سيتم تسجيل خروجك من الجلسة الحالية، مما يتطلب منك تسجيل الدخول مرة أخرى. وقد تظل الجلسات النشطة على أجهزة أخرى نشطة لمدة تصل إلى ساعة واحدة.</value>
|
||||
</data>
|
||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||
<value>كلمة المرور الرئيسية الحالية</value>
|
||||
@@ -2702,7 +2702,7 @@
|
||||
<value>تسجيل الدخول كـ {0}</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
||||
<value>تَغيير إجراء مهلة خزانتك لتسجيل الخروج</value>
|
||||
<value>تَغيير إجراء مهلة المخزن لتسجيل الخروج</value>
|
||||
</data>
|
||||
<data name="BlockAutoFill" xml:space="preserve">
|
||||
<value>حظر التعبئة التلقائية</value>
|
||||
@@ -2760,7 +2760,7 @@
|
||||
<value>جارٍ تسجيل الدخول</value>
|
||||
</data>
|
||||
<data name="Vault" xml:space="preserve">
|
||||
<value>الخزانة</value>
|
||||
<value>الخزنة</value>
|
||||
</data>
|
||||
<data name="Appearance" xml:space="preserve">
|
||||
<value>المظهر</value>
|
||||
@@ -2809,7 +2809,7 @@
|
||||
<value>{0} ساعات</value>
|
||||
</data>
|
||||
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
||||
<value>استخدم Bitwarden لحفظ مفاتيح المرور الجديدة وتسجيل الدخول باستخدام مفاتيح المرور المخزنة في خزانتك.</value>
|
||||
<value>استخدم Bitwarden لحفظ مفاتيح المرور الجديدة وتسجيل الدخول باستخدام مفاتيح المرور المخزنة في المخزن الخاص بك.</value>
|
||||
</data>
|
||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||
<value>يتم استخدام إطار التعبئة التلقائية لأندرويد للمساعدة في ملء معلومات تسجيل الدخول في تطبيقات أخرى على جهازك.</value>
|
||||
@@ -2865,7 +2865,7 @@
|
||||
<value>استكشف المزيد من الميزات لحساب Bitwarden الخاص بك على تطبيق الويب.</value>
|
||||
</data>
|
||||
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
||||
<value>يتيح لك Bitwarden مشاركة عناصر خزانتك مع الآخرين باستخدام حساب المؤسسة. تعرف على المزيد على موقع bitwarden.com على شبكة الإنترنت.</value>
|
||||
<value>يتيح لك Bitwarden مشاركة عناصر خزنتك مع الآخرين باستخدام حساب المؤسسة. تعرف على المزيد على موقع bitwarden.com على شبكة الإنترنت.</value>
|
||||
</data>
|
||||
<data name="RateAppDescriptionLong" xml:space="preserve">
|
||||
<value>ساعد الآخرين في معرفة ما إذا كان Bitwarden مناسبا لهم. قم بزيارة متجر التطبيقات وترك التقييم الآن.</value>
|
||||
|
||||
@@ -296,7 +296,7 @@
|
||||
<comment>Text to define that there are more options things to see.</comment>
|
||||
</data>
|
||||
<data name="MyVault" xml:space="preserve">
|
||||
<value>Seyfim</value>
|
||||
<value>Anbarım</value>
|
||||
<comment>The title for the vault page.</comment>
|
||||
</data>
|
||||
<data name="Authenticator" xml:space="preserve">
|
||||
@@ -364,7 +364,7 @@
|
||||
<comment>Label for a uri/url.</comment>
|
||||
</data>
|
||||
<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 name="Username" xml:space="preserve">
|
||||
<value>İstifadəçi adı</value>
|
||||
@@ -431,7 +431,7 @@
|
||||
<value>Bitwarden tətbiq uzantısı</value>
|
||||
</data>
|
||||
<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 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>
|
||||
@@ -446,7 +446,7 @@
|
||||
<value>E-poçtu dəyişdir</value>
|
||||
</data>
|
||||
<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 name="ChangeMasterPassword" xml:space="preserve">
|
||||
<value>Ana parolu dəyişdir</value>
|
||||
@@ -468,7 +468,7 @@
|
||||
<value>Elementə düzəliş et</value>
|
||||
</data>
|
||||
<data name="EnableAutomaticSyncing" xml:space="preserve">
|
||||
<value>Avto-sinxrn icazə ver</value>
|
||||
<value>Avto-sinxr icazə ver</value>
|
||||
</data>
|
||||
<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>
|
||||
@@ -520,7 +520,7 @@
|
||||
<value>Elementləri daxilə köçür</value>
|
||||
</data>
|
||||
<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 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>
|
||||
@@ -550,20 +550,20 @@
|
||||
<value>Dərhal</value>
|
||||
</data>
|
||||
<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 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 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 name="LoggingIn" xml:space="preserve">
|
||||
<value>Giriş edilir...</value>
|
||||
<comment>Message shown when interacting with the server</comment>
|
||||
</data>
|
||||
<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 name="Manage" xml:space="preserve">
|
||||
<value>İdarə et</value>
|
||||
@@ -572,7 +572,7 @@
|
||||
<value>Parol təsdiqləmə doğru deyil.</value>
|
||||
</data>
|
||||
<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 name="MasterPasswordHint" xml:space="preserve">
|
||||
<value>Ana parol məsləhəti (ixtiyari)</value>
|
||||
@@ -604,13 +604,13 @@
|
||||
<value>Yeni element yaradıldı.</value>
|
||||
</data>
|
||||
<data name="NoFavorites" xml:space="preserve">
|
||||
<value>Seyfinizdə heç bir sevimli yoxdur.</value>
|
||||
<value>Anbarınızda heç bir sevimli yoxdur.</value>
|
||||
</data>
|
||||
<data name="NoItems" xml:space="preserve">
|
||||
<value>Seyfinizdə heç bir element yoxdur.</value>
|
||||
<value>Anbarınızda heç bir element yoxdur.</value>
|
||||
</data>
|
||||
<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 name="NoUsernamePasswordConfigured" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="RateTheApp" xml:space="preserve">
|
||||
@@ -660,7 +660,7 @@
|
||||
<value>Ana parolu yenidən yaz</value>
|
||||
</data>
|
||||
<data name="SearchVault" xml:space="preserve">
|
||||
<value>Seyfdə axtar</value>
|
||||
<value>Anbarda axtar</value>
|
||||
</data>
|
||||
<data name="Security" xml:space="preserve">
|
||||
<value>Güvənlik</value>
|
||||
@@ -695,7 +695,7 @@
|
||||
<value>Sinxr uğursuz oldu</value>
|
||||
</data>
|
||||
<data name="SyncVaultNow" xml:space="preserve">
|
||||
<value>Seyfi indi sinxronlaşdır</value>
|
||||
<value>Anbarı indi sinxronlaşdır</value>
|
||||
</data>
|
||||
<data name="TouchID" xml:space="preserve">
|
||||
<value>Touch ID</value>
|
||||
@@ -705,10 +705,10 @@
|
||||
<value>İki mərhələli giriş</value>
|
||||
</data>
|
||||
<data name="UnlockWith" xml:space="preserve">
|
||||
<value>Kilidi {0} ilə aç</value>
|
||||
<value>{0} ilə kilidi açın</value>
|
||||
</data>
|
||||
<data name="UnlockWithPIN" xml:space="preserve">
|
||||
<value>Kilidi PIN kodla aç</value>
|
||||
<value>PIN kod ilə kilidi açın</value>
|
||||
</data>
|
||||
<data name="Validating" xml:space="preserve">
|
||||
<value>Doğrulanır</value>
|
||||
@@ -721,7 +721,7 @@
|
||||
<value>Elementə bax</value>
|
||||
</data>
|
||||
<data name="WebVault" xml:space="preserve">
|
||||
<value>Bitwarden veb seyfi</value>
|
||||
<value>Bitwarden veb anbarı</value>
|
||||
</data>
|
||||
<data name="Lost2FAApp" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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 name="BitwardenAutofillServiceOpenAccessibilitySettings" xml:space="preserve">
|
||||
<value>Əlçatımlılıq Ayarlarını aç</value>
|
||||
@@ -778,7 +778,7 @@
|
||||
<value>Vəziyyət</value>
|
||||
</data>
|
||||
<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 name="Autofill" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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 name="LearnMore" xml:space="preserve">
|
||||
<value>Daha ətraflı</value>
|
||||
@@ -984,10 +984,10 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
||||
<value>Server URL-si</value>
|
||||
</data>
|
||||
<data name="WebVaultUrl" xml:space="preserve">
|
||||
<value>Veb seyf server URL-si</value>
|
||||
<value>Veb anbar server URL-si</value>
|
||||
</data>
|
||||
<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 name="CustomFields" xml:space="preserve">
|
||||
<value>Özəl xanalar</value>
|
||||
@@ -1149,10 +1149,10 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
||||
<value>Bitwarden ilə avto-doldurma</value>
|
||||
</data>
|
||||
<data name="VaultIsLocked" xml:space="preserve">
|
||||
<value>Seyf kilidlənib</value>
|
||||
<value>Anbar kilidlənib</value>
|
||||
</data>
|
||||
<data name="GoToMyVault" xml:space="preserve">
|
||||
<value>Seyfimə get</value>
|
||||
<value>Anbarıma get</value>
|
||||
</data>
|
||||
<data name="Collections" xml:space="preserve">
|
||||
<value>Kolleksiyalar</value>
|
||||
@@ -1170,7 +1170,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
||||
<value>Avto-doldurma əlçatımlılıq xidməti</value>
|
||||
</data>
|
||||
<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 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>
|
||||
@@ -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>
|
||||
</data>
|
||||
<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 name="AutofillTurnOn" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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 name="InvalidEmail" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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 name="ExportVault" xml:space="preserve">
|
||||
<value>Seyfi xaricə köçür</value>
|
||||
<value>Anbarı xaricə köçür</value>
|
||||
</data>
|
||||
<data name="LockNow" xml:space="preserve">
|
||||
<value>İndi kilidlə</value>
|
||||
@@ -1483,7 +1483,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
||||
<value>Kilidi aç</value>
|
||||
</data>
|
||||
<data name="UnlockVault" xml:space="preserve">
|
||||
<value>Seyfin kilidini aç</value>
|
||||
<value>Anbar kilidini aç</value>
|
||||
</data>
|
||||
<data name="ThirtyMinutes" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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 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 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 name="Dark" xml:space="preserve">
|
||||
<value>Tünd</value>
|
||||
@@ -1540,7 +1540,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
||||
<comment>Default URI match detection for auto-fill.</comment>
|
||||
</data>
|
||||
<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 name="Theme" xml:space="preserve">
|
||||
<value>Tema</value>
|
||||
@@ -1586,13 +1586,13 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
||||
<value>Giriş əlavə etmək üçün soruş</value>
|
||||
</data>
|
||||
<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 name="OnRestart" xml:space="preserve">
|
||||
<value>Tətbiq yenidən başladılanda</value>
|
||||
</data>
|
||||
<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 name="ThemeAppliedOnRestart" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="UseBiometricsToUnlock" xml:space="preserve">
|
||||
<value>Kilidi açmaq üçün biometrik istifadə et</value>
|
||||
<value>Kilidi biometriklə aç</value>
|
||||
</data>
|
||||
<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>
|
||||
@@ -1650,7 +1650,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
||||
<value>Fayl formatı</value>
|
||||
</data>
|
||||
<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 name="SendVerificationCodeToEmail" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="Warning" xml:space="preserve">
|
||||
<value>Xəbərdarlıq</value>
|
||||
</data>
|
||||
<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 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 name="Clone" xml:space="preserve">
|
||||
<value>Klonla</value>
|
||||
@@ -1695,7 +1695,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
||||
<comment>Button text for an open operation (verb).</comment>
|
||||
</data>
|
||||
<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 name="SaveAttachmentSuccess" xml:space="preserve">
|
||||
<value>Qoşma uğurla saxlanıldı</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>
|
||||
</data>
|
||||
<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 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 name="LogInSso" xml:space="preserve">
|
||||
<value>Müəssisə üçün vahid daxil olma</value>
|
||||
<value>Müəssisə üçün tək daxil olma</value>
|
||||
</data>
|
||||
<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 name="OrgIdentifier" xml:space="preserve">
|
||||
<value>Təşkilat identifikatoru</value>
|
||||
@@ -1774,7 +1774,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
||||
<value>Ana parolu ayarla</value>
|
||||
</data>
|
||||
<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 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>
|
||||
@@ -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>
|
||||
</data>
|
||||
<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 name="AutofillServices" xml:space="preserve">
|
||||
<value>Avto-doldurma xidmətləri</value>
|
||||
</data>
|
||||
<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 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 name="Accessibility" xml:space="preserve">
|
||||
<value>Əlçatımlılığı istifadə et</value>
|
||||
@@ -1843,10 +1843,10 @@ 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>
|
||||
</data>
|
||||
<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 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 name="DrawOver" xml:space="preserve">
|
||||
<value>"Üzərində göstər"i istifadə edin</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>
|
||||
</data>
|
||||
<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 name="PersonalOwnershipPolicyInEffect" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="PasswordPrompt" xml:space="preserve">
|
||||
@@ -2092,7 +2092,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
||||
<value>Ana parolu güncəllə</value>
|
||||
</data>
|
||||
<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 name="UpdatingPassword" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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 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 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 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 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 name="AddAccount" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="FilterByVault" xml:space="preserve">
|
||||
<value>Elementləri seyfə görə filtrlə</value>
|
||||
<value>Elementləri anbara görə filtrlə</value>
|
||||
</data>
|
||||
<data name="AllVaults" xml:space="preserve">
|
||||
<value>Bütün seyflər</value>
|
||||
<value>Bütün anbarlar</value>
|
||||
</data>
|
||||
<data name="Vaults" xml:space="preserve">
|
||||
<value>Seyflər</value>
|
||||
<value>Anbarlar</value>
|
||||
</data>
|
||||
<data name="VaultFilterDescription" xml:space="preserve">
|
||||
<value>Seyf: {0}</value>
|
||||
<value>Anbar: {0}</value>
|
||||
</data>
|
||||
<data name="All" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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 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>
|
||||
@@ -2514,7 +2514,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
||||
<value>Cihazınıza bir bildiriş göndərildi.</value>
|
||||
</data>
|
||||
<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 name="ResendNotification" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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 name="DeclineAllRequests" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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 name="SearchForAnItemOrAddANewItem" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||
<value>Ana parolunuz təşkilatınızdakı siyasətlərdən birinə və ya bir neçəsinə uyğun gəlmir. 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 name="CurrentMasterPassword" xml:space="preserve">
|
||||
<value>Hazırkı ana parol</value>
|
||||
@@ -2700,7 +2700,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
||||
<value>{0} olaraq giriş edilir</value>
|
||||
</data>
|
||||
<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 name="BlockAutoFill" xml:space="preserve">
|
||||
<value>Avto-doldurmanı əngəllə</value>
|
||||
@@ -2758,7 +2758,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
||||
<value>Giriş edilir</value>
|
||||
</data>
|
||||
<data name="Vault" xml:space="preserve">
|
||||
<value>Seyf</value>
|
||||
<value>Anbar</value>
|
||||
</data>
|
||||
<data name="Appearance" xml:space="preserve">
|
||||
<value>Görünüş</value>
|
||||
@@ -2807,13 +2807,13 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
||||
<value>{0} saat</value>
|
||||
</data>
|
||||
<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 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 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 name="AdditionalOptions" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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 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>
|
||||
@@ -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>
|
||||
</data>
|
||||
<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 name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||
<value>Bu keçid açarını saxlayacaq bir giriş seçin</value>
|
||||
@@ -2968,10 +2968,10 @@ 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>
|
||||
</data>
|
||||
<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 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="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||
<value>Keçid açarları bu tətbiq üçün dəstəklənmir</value>
|
||||
|
||||
@@ -1101,7 +1101,7 @@
|
||||
<value>Г-ца</value>
|
||||
</data>
|
||||
<data name="Mx" xml:space="preserve">
|
||||
<value>Предпочитам да не посочвам</value>
|
||||
<value>Mx</value>
|
||||
</data>
|
||||
<data name="November" xml:space="preserve">
|
||||
<value>ноември</value>
|
||||
@@ -2584,16 +2584,16 @@
|
||||
<value>Проверяване в известните случаи на изтекли данни за тази парола</value>
|
||||
</data>
|
||||
<data name="ExposedMasterPassword" xml:space="preserve">
|
||||
<value>Разобличена главна парола</value>
|
||||
<value>Exposed Master Password</value>
|
||||
</data>
|
||||
<data name="PasswordFoundInADataBreachAlertDescription" xml:space="preserve">
|
||||
<value>Паролата е намерена в пробив на данни. Използвайте уникална парола, за да защитите Вашия акаунт. Наистина ли искате да използвате слаба парола?</value>
|
||||
<value>Password found in a data breach. Use a unique password to protect your account. Are you sure you want to use an exposed password?</value>
|
||||
</data>
|
||||
<data name="WeakAndExposedMasterPassword" xml:space="preserve">
|
||||
<value>Слаба и разобличена главна парола</value>
|
||||
<value>Weak and Exposed Master Password</value>
|
||||
</data>
|
||||
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
|
||||
<value>Разпозната е слаба парола, която присъства в известен случай на изтекли данни. Използвайте сложна и уникална парола, за да защитите Вашия акаунт. Наистина ли искате да използвате тази парола?</value>
|
||||
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
|
||||
</data>
|
||||
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
|
||||
<value>Идентификаторът за еднократн идентификация на организация е задължителен.</value>
|
||||
@@ -2978,7 +2978,7 @@
|
||||
<value>За това приложение не се поддържат секретни ключове</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
||||
<value>Операцията със секретния ключ беше неуспешна, тъй като потребителят не може да бъде потвърден.</value>
|
||||
<value>Passkey operation failed because browser is not privileged</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
||||
<value>Операцията със секретния ключ беше неуспешна, тъй като подписът в браузъра не съвпада</value>
|
||||
|
||||
@@ -385,7 +385,7 @@
|
||||
<value>Gwirio'r prif gyfrinair</value>
|
||||
</data>
|
||||
<data name="VerifyPIN" xml:space="preserve">
|
||||
<value>Gwirio'r PIN</value>
|
||||
<value>Verify PIN</value>
|
||||
</data>
|
||||
<data name="Version" xml:space="preserve">
|
||||
<value>Fersiwn</value>
|
||||
@@ -446,7 +446,7 @@
|
||||
<value>Newid ebost</value>
|
||||
</data>
|
||||
<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 name="ChangeMasterPassword" xml:space="preserve">
|
||||
<value>Newid y prif gyfrinair</value>
|
||||
@@ -610,7 +610,7 @@
|
||||
<value>Does dim eitemau yn eich cell.</value>
|
||||
</data>
|
||||
<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 name="NoUsernamePasswordConfigured" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="TwoStepLogin" xml:space="preserve">
|
||||
<value>Mewngofnodi dau gam</value>
|
||||
<value>Mewngofnodi dau agm</value>
|
||||
</data>
|
||||
<data name="UnlockWith" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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 name="ExportVault" xml:space="preserve">
|
||||
<value>Allforio'r gell</value>
|
||||
@@ -2943,7 +2943,7 @@ Do you want to switch to this account?</value>
|
||||
<comment>The parameter is the RpId</comment>
|
||||
</data>
|
||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||
<value>Yn giwrio eich hunaniaeth...</value>
|
||||
<value>Verifying identity...</value>
|
||||
</data>
|
||||
<data name="Passwords" xml:space="preserve">
|
||||
<value>Passwords</value>
|
||||
|
||||
@@ -910,7 +910,7 @@ Das Scannen erfolgt automatisch.</value>
|
||||
<value>TOTP kopieren</value>
|
||||
</data>
|
||||
<data name="CopyTotpAutomaticallyDescription" xml:space="preserve">
|
||||
<value>Ist ein Authentifizierungsschlüssel mit deinen Zugangsdaten verknüpft, wird der TOTP-Verifizierungscode in 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 name="CopyTotpAutomatically" xml:space="preserve">
|
||||
<value>TOTP automatisch kopieren</value>
|
||||
@@ -1195,7 +1195,7 @@ Das Scannen erfolgt automatisch.</value>
|
||||
<value>Windows Hello</value>
|
||||
</data>
|
||||
<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 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>
|
||||
@@ -1292,7 +1292,7 @@ Das Scannen erfolgt automatisch.</value>
|
||||
<value>Auto-Ausfüllen aktiviert!</value>
|
||||
</data>
|
||||
<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 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>
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
<comment>Full label for a email address.</comment>
|
||||
</data>
|
||||
<data name="EmailUs" xml:space="preserve">
|
||||
<value>Επικοινωνία μέσω email</value>
|
||||
<value>Στείλτε μας email</value>
|
||||
</data>
|
||||
<data name="EmailUsDescription" xml:space="preserve">
|
||||
<value>Στείλτε μας email για να λάβετε βοήθεια ή να αφήσετε σχόλια.</value>
|
||||
@@ -296,11 +296,11 @@
|
||||
<comment>Text to define that there are more options things to see.</comment>
|
||||
</data>
|
||||
<data name="MyVault" xml:space="preserve">
|
||||
<value>Η κρύπτη μου</value>
|
||||
<value>Το vault μου</value>
|
||||
<comment>The title for the vault page.</comment>
|
||||
</data>
|
||||
<data name="Authenticator" xml:space="preserve">
|
||||
<value>Εφαρμογή Επαλήθευσης</value>
|
||||
<value>Αυθεντικοποιητής</value>
|
||||
<comment>Authenticator TOTP feature</comment>
|
||||
</data>
|
||||
<data name="Name" xml:space="preserve">
|
||||
@@ -422,7 +422,7 @@
|
||||
<value>Υπηρεσία αυτόματης συμπλήρωσης</value>
|
||||
</data>
|
||||
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
||||
<value>Ορίστε το Bitwarden ως πάροχο κλειδιού πρόσβασης στις ρυθμίσεις της συσκευής.</value>
|
||||
<value>Set Bitwarden as your passkey provider in device settings.</value>
|
||||
</data>
|
||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||
<value>Αποφυγή αμφιλεγόμενων χαρακτήρων</value>
|
||||
@@ -431,7 +431,7 @@
|
||||
<value>Επέκταση εφαρμογής Bitwarden</value>
|
||||
</data>
|
||||
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
||||
<value>Ο ευκολότερος τρόπος για να προσθέστε νέες συνδέσεις στη κρύπτη σας, είναι μέσω της επέκτασης εφαρμογής Bitwarden. Μάθετε περισσότερα σχετικά με τη χρήση της επέκτασης εφαρμογής Bitwarden, μεταβαίνοντας στις "Ρυθμίσεις".</value>
|
||||
<value>Ο ευκολότερος τρόπος για να προσθέστε νέες συνδέσεις στο vault σας, είναι μέσω της επέκτασης εφαρμογής Bitwarden. Μάθετε περισσότερα σχετικά με τη χρήση της επέκτασης εφαρμογής Bitwarden, μεταβαίνοντας στις "Ρυθμίσεις".</value>
|
||||
</data>
|
||||
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
|
||||
<value>Χρήση του Bitwarden στο Safari και σε άλλες εφαρμογές για αυτόματη συμπλήρωση των συνδέσεων σας.</value>
|
||||
@@ -443,7 +443,7 @@
|
||||
<value>Χρησιμοποιείστε την υπηρεσία προσβασιμότητας Bitwarden, για την αυτόματη συμπλήρωση συνδέσεων.</value>
|
||||
</data>
|
||||
<data name="ChangeEmail" xml:space="preserve">
|
||||
<value>Αλλαγή διεύθυνσης ηλ. ταχυδρομείου</value>
|
||||
<value>Αλλαγή email</value>
|
||||
</data>
|
||||
<data name="ChangeEmailConfirmation" xml:space="preserve">
|
||||
<value>Μπορείτε να αλλάξετε τη διεύθυνση του email σας στο bitwarden.com. Θέλετε να επισκεφθείτε την ιστοσελίδα τώρα;</value>
|
||||
@@ -550,10 +550,10 @@
|
||||
<value>Άμεσα</value>
|
||||
</data>
|
||||
<data name="VaultTimeout" xml:space="preserve">
|
||||
<value>Χρόνος λήξης κρύπτης</value>
|
||||
<value>Χρόνος λήξης vault</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutAction" xml:space="preserve">
|
||||
<value>Ενέργεια χρόνου λήξης κρύπτης</value>
|
||||
<value>Ενέργεια χρόνου λήξης vault</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
||||
<value>Η αποσύνδεση θα καταργήσει όλη την πρόσβαση στο vault σας και απαιτεί online έλεγχο ταυτότητας μετά το χρονικό όριο λήξης. Είστε βέβαιοι ότι θέλετε να χρησιμοποιήσετε αυτήν τη ρύθμιση;</value>
|
||||
@@ -644,7 +644,7 @@
|
||||
<value>Είστε βέβαιοι ότι θέλετε να αντικαταστήσετε τον τρέχον κωδικό;</value>
|
||||
</data>
|
||||
<data name="PushNotificationAlert" xml:space="preserve">
|
||||
<value>Το Bitwarden διατηρεί αυτόματα συγχρονισμένη την κρύπτη σας με τη χρήση ειδοποιήσεων push. Για την καλύτερη δυνατή εμπειρία, επιλέξτε «Αποδοχή» στο ακόλουθο μήνυμα ερώτησης όταν σας ζητηθεί να ενεργοποιήσετε τις ειδοποιήσεις push.</value>
|
||||
<value>Το Bitwarden κρατάει συγχρονισμένο το vault σας αυτόματα, με τη χρήση ειδοποιήσεων push. Για την καλύτερη δυνατή εμπειρία, επιλέξτε "Να επιτρέπεται" στην παρακάτω προτροπή όταν σας ζητηθεί να ενεργοποιήσετε τις ειδοποιήσεις push.</value>
|
||||
<comment>Push notifications for apple products</comment>
|
||||
</data>
|
||||
<data name="RateTheApp" xml:space="preserve">
|
||||
@@ -660,7 +660,7 @@
|
||||
<value>Εισάγετε ξανά τον κύριο κωδικό</value>
|
||||
</data>
|
||||
<data name="SearchVault" xml:space="preserve">
|
||||
<value>Αναζήτηση κρύπτης</value>
|
||||
<value>Αναζήτηση στο vault</value>
|
||||
</data>
|
||||
<data name="Security" xml:space="preserve">
|
||||
<value>Ασφάλεια</value>
|
||||
@@ -695,7 +695,7 @@
|
||||
<value>Ο συγχρονισμός απέτυχε</value>
|
||||
</data>
|
||||
<data name="SyncVaultNow" xml:space="preserve">
|
||||
<value>Συγχρονισμός κρύπτης τώρα</value>
|
||||
<value>Συγχρονισμός του vault τώρα</value>
|
||||
</data>
|
||||
<data name="TouchID" xml:space="preserve">
|
||||
<value>Touch ID</value>
|
||||
@@ -721,7 +721,7 @@
|
||||
<value>Προβολή στοιχείου</value>
|
||||
</data>
|
||||
<data name="WebVault" xml:space="preserve">
|
||||
<value>Διαδικτυακή κρύπτη Bitwarden</value>
|
||||
<value>Διαδικτυακό vault Bitwarden</value>
|
||||
</data>
|
||||
<data name="Lost2FAApp" xml:space="preserve">
|
||||
<value>Χάσατε την εφαρμογή επαλήθευσης;</value>
|
||||
@@ -790,10 +790,10 @@
|
||||
<value>Είστε βέβαιοι για την αυτόματη συμπλήρωση αυτού του στοιχείου; Δεν υπάρχει πλήρης αντιστοιχία για "{0}".</value>
|
||||
</data>
|
||||
<data name="MatchingItems" xml:space="preserve">
|
||||
<value>Αντίστοιχα στοιχεία</value>
|
||||
<value>Αντιστοίχιση Στοιχείων</value>
|
||||
</data>
|
||||
<data name="PossibleMatchingItems" xml:space="preserve">
|
||||
<value>Πιθανά αντικείμενα που ταιριάζουν</value>
|
||||
<value>Πιθανά Στοιχεία Αντιστοίχισης</value>
|
||||
</data>
|
||||
<data name="Search" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="AuthenticatorAppTitle" xml:space="preserve">
|
||||
<value>Εφαρμογή Επαλήθευσης</value>
|
||||
<value>Εφαρμογή αυθεντικοποίησης</value>
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="EnterVerificationCodeApp" xml:space="preserve">
|
||||
@@ -850,7 +850,7 @@
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="VerificationEmailSent" xml:space="preserve">
|
||||
<value>Το μήνυμα επιβεβαίωσης ηλ. ταχυδρομείου στάλθηκε</value>
|
||||
<value>Το email επιβεβαίωσης στάλθηκε</value>
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="YubiKeyInstruction" xml:space="preserve">
|
||||
@@ -949,7 +949,7 @@
|
||||
<value>Δεν μπορείτε να χρησιμοποιήσετε αυτήν τη δυνατότητα μέχρι να ενημερώσετε το κλειδί κρυπτογράφησης.</value>
|
||||
</data>
|
||||
<data name="EncryptionKeyMigrationRequiredDescriptionLong" xml:space="preserve">
|
||||
<value>Απαιτείται μεταφορά του κλειδιού κρυπτογράφησης. Παρακαλούμε συνδεθείτε μέσω της διαδικτυακής κρύπτης για να ενημερώσετε το κλειδί κρυπτογράφησης.</value>
|
||||
<value>Απαιτείται μεταφορά του κλειδιού κρυπτογράφησης. Παρακαλούμε συνδεθείτε μέσω του διαδικτυακού vault για να ενημερώσετε το κλειδί κρυπτογράφησης.</value>
|
||||
</data>
|
||||
<data name="LearnMore" xml:space="preserve">
|
||||
<value>Μάθετε περισσότερα</value>
|
||||
@@ -984,7 +984,7 @@
|
||||
<value>URL Διακομιστή</value>
|
||||
</data>
|
||||
<data name="WebVaultUrl" xml:space="preserve">
|
||||
<value>URL διακομιστή διαδικτυακής κρύπτης</value>
|
||||
<value>URL διακομιστή διαδικτυακού vault</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
|
||||
<value>Πατήστε στην ειδοποίηση για να συμπληρώσετε αυτόματα ένα στοιχείο από τη λίστα σας.</value>
|
||||
@@ -1101,7 +1101,7 @@
|
||||
<value>Κα</value>
|
||||
</data>
|
||||
<data name="Mx" xml:space="preserve">
|
||||
<value>Ουδέτερο</value>
|
||||
<value>Mx στα Ελληνικά</value>
|
||||
</data>
|
||||
<data name="November" xml:space="preserve">
|
||||
<value>Νοέμβριος</value>
|
||||
@@ -1195,7 +1195,7 @@
|
||||
<value>Windows Hello</value>
|
||||
</data>
|
||||
<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 name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||
<value>Δεν ήταν δυνατό να ανοίξουμε αυτόματα το μενού ρυθμίσεων αυτόματης συμπλήρωσης Android για εσάς. Μπορείτε να πλοηγηθείτε στο μενού ρυθμίσεων αυτόματης συμπλήρωσης με μη αυτόματο τρόπο από τις Ρυθμίσεις Android > Σύστημα > Γλώσσες και εισαγωγή > Σύνθετες > Υπηρεσία αυτόματης συμπλήρωσης.</value>
|
||||
@@ -1252,7 +1252,7 @@
|
||||
<value>Έναρξη με</value>
|
||||
</data>
|
||||
<data name="URIMatchDetection" xml:space="preserve">
|
||||
<value>Εντοπισμός αντιστοίχισης URI</value>
|
||||
<value>Εντοπισμός Αντιστοίχισης URI</value>
|
||||
</data>
|
||||
<data name="MatchDetection" xml:space="preserve">
|
||||
<value>Εντοπισμός αντιστοίχισης</value>
|
||||
@@ -1384,10 +1384,10 @@
|
||||
<value>Αναζήτηση στη συλλογή</value>
|
||||
</data>
|
||||
<data name="SearchFileSends" xml:space="preserve">
|
||||
<value>Αναζήτηση αρχείων Send</value>
|
||||
<value>Αναζήτηση αρχείων Sends</value>
|
||||
</data>
|
||||
<data name="SearchTextSends" xml:space="preserve">
|
||||
<value>Αναζήτηση κειμένων Send</value>
|
||||
<value>Αναζήτηση Κειμένου Sends</value>
|
||||
</data>
|
||||
<data name="SearchGroup" xml:space="preserve">
|
||||
<value>Αναζήτηση {0}</value>
|
||||
@@ -1471,7 +1471,7 @@
|
||||
<value>Το Bitwarden επιτρέπει να μοιράζεστε τα στοιχεία του vault σας με άλλους χρησιμοποιώντας ένα λογαριασμό οργανισμού. Θέλετε να επισκεφθείτε την ιστοσελίδα bitwarden.com για να μάθετε περισσότερα;</value>
|
||||
</data>
|
||||
<data name="ExportVault" xml:space="preserve">
|
||||
<value>Εξαγωγή κρύπτης</value>
|
||||
<value>Εξαγωγή του vault</value>
|
||||
</data>
|
||||
<data name="LockNow" xml:space="preserve">
|
||||
<value>Κλείδωμα τώρα</value>
|
||||
@@ -1483,7 +1483,7 @@
|
||||
<value>Ξεκλείδωμα</value>
|
||||
</data>
|
||||
<data name="UnlockVault" xml:space="preserve">
|
||||
<value>Ξεκλείδωμα κρύπτης</value>
|
||||
<value>Ξεκλείδωμα του vault</value>
|
||||
</data>
|
||||
<data name="ThirtyMinutes" xml:space="preserve">
|
||||
<value>30 λεπτά</value>
|
||||
@@ -1536,7 +1536,7 @@
|
||||
<comment>Clipboard is the operating system thing where you copy/paste data to on your device.</comment>
|
||||
</data>
|
||||
<data name="DefaultUriMatchDetection" xml:space="preserve">
|
||||
<value>Προεπιλεγμένη ανίχνευση αντιστοιχίας URI</value>
|
||||
<value>Προεπιλεγμένη Ανίχνευση Αντιστοιχίας URI</value>
|
||||
<comment>Default URI match detection for auto-fill.</comment>
|
||||
</data>
|
||||
<data name="DefaultUriMatchDetectionDescription" xml:space="preserve">
|
||||
@@ -1583,16 +1583,16 @@
|
||||
<value>Αυτόματη συμπλήρωση μπλοκαρισμένων URI</value>
|
||||
</data>
|
||||
<data name="AskToAddLogin" xml:space="preserve">
|
||||
<value>Ρώτησε για να προσθέσεις σύνδεση</value>
|
||||
<value>Ρωτήστε για να προσθέστε σύνδεση</value>
|
||||
</data>
|
||||
<data name="AskToAddLoginDescription" xml:space="preserve">
|
||||
<value>Ρώτησε για να προσθέσεις κάποιο αντικείμενο αν δε βρεθεί στη κρύπτη μου.</value>
|
||||
<value>Ρωτήστε για να προσθέσετε ένα αντικείμενο αν δε βρεθεί στο vault σας.</value>
|
||||
</data>
|
||||
<data name="OnRestart" xml:space="preserve">
|
||||
<value>Κατά την επανεκκίνηση της εφαρμογής</value>
|
||||
</data>
|
||||
<data name="AutofillServiceNotEnabled" xml:space="preserve">
|
||||
<value>Η αυτόματη συμπλήρωση διευκολύνει την ασφαλή πρόσβαση στην κρύπτη του Bitwarden από άλλες ιστοσελίδες και εφαρμογές. Φαίνεται ότι δεν έχετε ενεργοποιήσει την υπηρεσία αυτόματης συμπλήρωσης για το Bitwarden. Ενεργοποιήστε την αυτόματη συμπλήρωση από τις "Ρυθμίσεις".</value>
|
||||
<value>Η αυτόματη συμπλήρωση διευκολύνει την ασφαλή πρόσβαση στο vault του Bitwarden από άλλες ιστοσελίδες και εφαρμογές. Φαίνεται ότι δεν έχετε ενεργοποιήσει την υπηρεσία αυτόματης συμπλήρωσης για το Bitwarden. Ενεργοποιήστε την αυτόματη συμπλήρωση από τις "Ρυθμίσεις".</value>
|
||||
</data>
|
||||
<data name="ThemeAppliedOnRestart" xml:space="preserve">
|
||||
<value>Οι αλλαγές θεμάτων θα ισχύουν όταν γίνει επανεκκίνηση της εφαρμογής.</value>
|
||||
@@ -1629,7 +1629,7 @@
|
||||
<value>Το Bitwarden χρειάζεται προσοχή - Ανατρέξτε στην ενότητα "Υπηρεσία προσβασιμότητας αυτόματης συμπλήρωσης" από τις ρυθμίσεις Bitwarden</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillServiceOverlayPermission" xml:space="preserve">
|
||||
<value>3. Στην οθόνη Ρυθμίσεων της Εφαρμογής Android του Bitwarden, μεταβείτε στην ενότητα "Εμφάνιση πάνω από άλλες εφαρμογές" επιλογές (για προχωρημένους) και πατήστε το κουμπί για να ενεργοποιήσετε την υποστήριξη επικάλυψης.</value>
|
||||
<value>3. Στις Ρυθμίσεις του Bitwarden για Android , μεταβείτε στην ενότητα "Εμφάνιση από άλλες εφαρμογές" (Για προχωρημένους) και πατήστε το διακόπτη για να ενεργοποιήσετε την υποστήριξη επικάλυψης.</value>
|
||||
</data>
|
||||
<data name="OverlayPermission" xml:space="preserve">
|
||||
<value>Άδειες</value>
|
||||
@@ -1671,7 +1671,7 @@
|
||||
<value>Τα κλειδιά κρυπτογράφησης λογαριασμού είναι μοναδικά για κάθε λογαριασμό χρήστη Bitwarden, οπότε δεν μπορείτε να εισάγετε μια κρυπτογραφημένη εξαγωγή σε διαφορετικό λογαριασμό.</value>
|
||||
</data>
|
||||
<data name="ExportVaultConfirmationTitle" xml:space="preserve">
|
||||
<value>Επιβεβαίωση εξαγωγής κρύπτης</value>
|
||||
<value>Επιβεβαίωση εξαγωγής vault</value>
|
||||
<comment>Title for the alert to confirm vault exports.</comment>
|
||||
</data>
|
||||
<data name="Warning" xml:space="preserve">
|
||||
@@ -1723,7 +1723,7 @@
|
||||
<comment>Message shown when interacting with the server</comment>
|
||||
</data>
|
||||
<data name="ItemRestored" xml:space="preserve">
|
||||
<value>Το αντικείμενο επαναφέρθηκε</value>
|
||||
<value>Το στοιχείο έχει ανακτηθεί.</value>
|
||||
<comment>Confirmation message after successfully restoring a soft-deleted item</comment>
|
||||
</data>
|
||||
<data name="Trash" xml:space="preserve">
|
||||
@@ -1771,7 +1771,7 @@
|
||||
<value>Δεν είναι δυνατή η σύνδεση με SSO</value>
|
||||
</data>
|
||||
<data name="SetMasterPassword" xml:space="preserve">
|
||||
<value>Ορισμός κύριου κωδικού πρόσβασης</value>
|
||||
<value>Ορισμός Κύριου Κωδικού</value>
|
||||
</data>
|
||||
<data name="SetMasterPasswordSummary" xml:space="preserve">
|
||||
<value>Για να ολοκληρώσετε τη σύνδεση με SSO, ορίστε έναν κύριο κωδικό πρόσβασης για πρόσβαση και προστασία του vault σας.</value>
|
||||
@@ -1798,7 +1798,7 @@
|
||||
<value>Να περιέχει έναν ή περισσότερους από τους ακόλουθους ειδικούς χαρακτήρες {0}</value>
|
||||
</data>
|
||||
<data name="MasterPasswordPolicyValidationTitle" xml:space="preserve">
|
||||
<value>Μη έγκυρος κωδικός πρόσβασης</value>
|
||||
<value>Λανθασμένος Κωδικός</value>
|
||||
</data>
|
||||
<data name="MasterPasswordPolicyValidationMessage" xml:space="preserve">
|
||||
<value>Ο κωδικός πρόσβασης δεν πληροί τις απαιτήσεις του οργανισμού. Ελέγξτε τις πληροφορίες πολιτικής και δοκιμάστε ξανά.</value>
|
||||
@@ -1822,10 +1822,10 @@
|
||||
<value>Το Bitwarden χρειάζεται προσοχή - Ενεργοποιήστε το "Draw-Over" στις "Υπηρεσίες αυτόματης συμπλήρωσης" από το Bitwarden Settings</value>
|
||||
</data>
|
||||
<data name="PasskeyManagement" xml:space="preserve">
|
||||
<value>Διαχείριση κλειδιού πρόσβασης</value>
|
||||
<value>Passkey management</value>
|
||||
</data>
|
||||
<data name="AutofillServices" xml:space="preserve">
|
||||
<value>Υπηρεσία αυτόματης συμπλήρωσης</value>
|
||||
<value>Υπηρεσία Αυτόματης Συμπλήρωσης</value>
|
||||
</data>
|
||||
<data name="InlineAutofill" xml:space="preserve">
|
||||
<value>Χρησιμοποιήστε Inline Αυτόματη συμπλήρωση</value>
|
||||
@@ -1834,7 +1834,7 @@
|
||||
<value>Χρησιμοποιήστε ενσωματωμένη αυτόματη συμπλήρωση εάν το επιλεγμένο IME (πληκτρολόγιο) το υποστηρίζει. Εάν η διαμόρφωση δεν υποστηρίζεται (ή αυτή η επιλογή είναι απενεργοποιημένη), θα χρησιμοποιηθεί η προεπιλεγμένη επικάλυψη αυτόματης συμπλήρωσης.</value>
|
||||
</data>
|
||||
<data name="Accessibility" xml:space="preserve">
|
||||
<value>Χρήση προσβασιμότητας</value>
|
||||
<value>Χρησιμοποιήστε την Προσβασιμότητα</value>
|
||||
</data>
|
||||
<data name="AccessibilityDescription" xml:space="preserve">
|
||||
<value>Χρησιμοποιήστε την υπηρεσία προσβασιμότητας Bitwarden για να συμπληρώσετε αυτόματα τις συνδέσεις σας σε εφαρμογές και στον ιστό. Όταν είναι ενεργοποιημένο, θα εμφανιστεί ένα αναδυόμενο παράθυρο όταν επιλέγονται πεδία σύνδεσης</value>
|
||||
@@ -1861,7 +1861,7 @@
|
||||
<value>Εάν είναι ενεργοποιημένη, η προσβασιμότητα θα εμφανίσει ένα αναδυόμενο παράθυρο για την αύξηση της υπηρεσίας αυτόματης συμπλήρωσης για παλαιότερες εφαρμογές που δεν υποστηρίζουν το Android Autofill Framework.</value>
|
||||
</data>
|
||||
<data name="PersonalOwnershipSubmitError" xml:space="preserve">
|
||||
<value>Λόγω μιας Πολιτικής Επιχειρήσεων, δεν επιτρέπεται η αποθήκευση αντικειμένων στη προσωπικό σας κρύπτη. Αλλάξτε την επιλογή Ιδιοκτησίας σε έναν οργανισμό και επιλέξτε από τις διαθέσιμες Συλλογές.</value>
|
||||
<value>Λόγω μιας Πολιτικής Επιχειρήσεων, δεν επιτρέπεται η αποθήκευση αντικειμένων στο προσωπικό σας vault. Αλλάξτε την επιλογή Ιδιοκτησίας σε έναν οργανισμό και επιλέξτε από τις διαθέσιμες Συλλογές.</value>
|
||||
</data>
|
||||
<data name="PersonalOwnershipPolicyInEffect" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="OneDay" xml:space="preserve">
|
||||
@@ -2092,10 +2092,10 @@
|
||||
<value>Ενημερώστε τον κύριο κωδικό πρόσβασης</value>
|
||||
</data>
|
||||
<data name="UpdateMasterPasswordWarning" xml:space="preserve">
|
||||
<value>Ο Κύριος Κωδικός Πρόσβασής σας άλλαξε πρόσφατα από διαχειριστή στον οργανισμό σας. Για να αποκτήσετε πρόσβαση στη κρύπτη, πρέπει να ενημερώσετε το κύριο κωδικό τώρα. Η διαδικασία θα σας αποσυνδέσει από την τρέχουσα συνεδρία σας, απαιτώντας από εσάς να συνδεθείτε ξανά. Οι ενεργές συνεδρίες σε άλλες συσκευές ενδέχεται να συνεχίσουν να είναι ενεργές για μία ώρα.</value>
|
||||
<value>Ο Κύριος Κωδικός Πρόσβασής σας άλλαξε πρόσφατα από διαχειριστή στον οργανισμό σας. Για να αποκτήσετε πρόσβαση στο vault, πρέπει να ενημερώσετε το κύριο κωδικό τώρα. Η διαδικασία θα σας αποσυνδέσει από την τρέχουσα συνεδρία σας, απαιτώντας από εσάς να συνδεθείτε ξανά. Οι ενεργές συνεδρίες σε άλλες συσκευές ενδέχεται να συνεχίσουν να είναι ενεργές για μία ώρα.</value>
|
||||
</data>
|
||||
<data name="UpdatingPassword" xml:space="preserve">
|
||||
<value>Ενημέρωση κωδικού πρόσβασης</value>
|
||||
<value>Ενημέρωση Κωδικού Πρόσβασης</value>
|
||||
</data>
|
||||
<data name="UpdatePasswordError" xml:space="preserve">
|
||||
<value>Δεν είναι δυνατή η ενημέρωση του κωδικού πρόσβασης</value>
|
||||
@@ -2107,7 +2107,7 @@
|
||||
<value>{0} χρησιμοποιεί SSO με κρυπτογράφηση διαχείρισης πελατών. Συνεχίζοντας θα καταργήσετε τον Κύριο Κωδικό από το λογαριασμό σας και θα απαιτήσετε SSO για να συνδεθείτε.</value>
|
||||
</data>
|
||||
<data name="RemoveMasterPasswordWarning2" xml:space="preserve">
|
||||
<value>Αν δε θέλετε να αφαιρέσετε τον κύριο κωδικό πρόσβασής σας, μπορείτε να φύγετε από αυτόν τον οργανισμό.</value>
|
||||
<value>Αν δεν θέλετε να αφαιρέσετε τον Κύριο Κωδικό Πρόσβασης, μπορείτε να φύγετε από αυτόν τον οργανισμό.</value>
|
||||
</data>
|
||||
<data name="LeaveOrganization" xml:space="preserve">
|
||||
<value>Αποχώρηση από τον οργανισμό</value>
|
||||
@@ -2137,22 +2137,22 @@
|
||||
<value>Αυτός ο οργανισμός έχει μια επιχειρηματική πολιτική που θα σας εγγράψει αυτόματα στην επαναφορά κωδικού. Η εγγραφή θα επιτρέψει στους διαχειριστές του οργανισμού να αλλάξουν τον κύριο κωδικό πρόσβασης σας.</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
|
||||
<value>Οι πολιτικές του οργανισμού σας επηρεάζουν το χρονικό όριο της κρύπτης σας. Το μέγιστο επιτρεπόμενο Χρονικό όριο Κρύπτης είναι {0} ώρα(ες) και {1} λεπτό(ά).</value>
|
||||
<value>Οι πολιτικές του οργανισμού σας επηρεάζουν το χρονικό όριο vault σας. Το μέγιστο επιτρεπόμενο Χρονικό όριο Vault είναι {0} ώρα(ες) και {1} λεπτό(ά)</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
||||
<value>Οι πολιτικές του οργανισμού σας επηρεάζουν το χρονικό όριο της κρύπτης σας. Το μέγιστο επιτρεπόμενο χρονικό όριο κρύπτης είναι {0} ώρα(ες) και {1} λεπτό(ά). Το χρονικό όριο του vault σας έχει οριστεί σε {2}.</value>
|
||||
<value>Οι πολιτικές του οργανισμού σας επηρεάζουν το χρονικό όριο του vault σας. Το μέγιστο επιτρεπόμενο χρονικό όριο vault είναι {0} ώρα(ες) και {1} λεπτό(ά). Το χρονικό όριο του vault σας έχει οριστεί σε {2}.</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
|
||||
<value>Οι πολιτικές του οργανισμού σας έχουν ορίσει την ενέργεια χρονικού ορίου λήξης κρύπτης σε {0}.</value>
|
||||
<value>Οι πολιτικές του οργανισμού σας έχουν ορίσει την ενέργεια χρονικού ορίου vault σε {0}.</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutToLarge" xml:space="preserve">
|
||||
<value>Το χρονικό όριο του vault σας υπερβαίνει τους περιορισμούς που έχει ορίσει ο οργανισμός σας.</value>
|
||||
</data>
|
||||
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
|
||||
<value>Μία ή περισσότερες οργανωτικές πολιτικές αποτρέπουν την εξαγωγή της προσωπικής κρύπτης.</value>
|
||||
<value>Μία ή περισσότερες οργανωτικές πολιτικές αποτρέπουν την εξαγωγή του προσωπικού vault.</value>
|
||||
</data>
|
||||
<data name="AddAccount" xml:space="preserve">
|
||||
<value>Προσθήκη λογαριασμού</value>
|
||||
<value>Προσθήκη Λογαριασμού</value>
|
||||
</data>
|
||||
<data name="AccountUnlocked" xml:space="preserve">
|
||||
<value>Ξεκλειδώθηκε</value>
|
||||
@@ -2167,7 +2167,7 @@
|
||||
<value>Μετάβαση στον επόμενο διαθέσιμο λογαριασμό</value>
|
||||
</data>
|
||||
<data name="AccountLockedSuccessfully" xml:space="preserve">
|
||||
<value>Ο λογαριασμός κλειδώθηκε</value>
|
||||
<value>Κλειδωμένος Λογαριασμός</value>
|
||||
</data>
|
||||
<data name="AccountLoggedOutSuccessfully" xml:space="preserve">
|
||||
<value>Ο λογαριασμός αποσυνδέθηκε επιτυχώς</value>
|
||||
@@ -2176,13 +2176,13 @@
|
||||
<value>Ο λογαριασμός αφαιρέθηκε επιτυχώς</value>
|
||||
</data>
|
||||
<data name="DeleteAccount" xml:space="preserve">
|
||||
<value>Διαγραφή λογαριασμού</value>
|
||||
<value>Διαγραφή Λογαριασμού</value>
|
||||
</data>
|
||||
<data name="DeletingYourAccountIsPermanent" xml:space="preserve">
|
||||
<value>Η διαγραφή του λογαριασμού σας είναι μόνιμη</value>
|
||||
</data>
|
||||
<data name="DeleteAccountExplanation" xml:space="preserve">
|
||||
<value>Ο λογαριασμός σας και όλα τα σχετικά δεδομένα θα διαγραφούν και δε θα ανακτηθούν. Σίγουρα θέλετε να συνεχίσετε;</value>
|
||||
<value>Ο λογαριασμός σας και όλα τα σχετικά δεδομένα θα διαγραφούν και δεν θα ανακτηθούν. Είστε σίγουροι ότι θέλετε να συνεχίσετε?</value>
|
||||
</data>
|
||||
<data name="DeletingYourAccount" xml:space="preserve">
|
||||
<value>Διαγραφή του λογαριασμού σας</value>
|
||||
@@ -2191,7 +2191,7 @@
|
||||
<value>Ο λογαριασμός σας έχει διαγραφεί οριστικά</value>
|
||||
</data>
|
||||
<data name="InvalidVerificationCode" xml:space="preserve">
|
||||
<value>Μη έγκυρος κωδικός επαλήθευσης</value>
|
||||
<value>Μη Έγκυρος Κωδικός Επαλήθευσης.</value>
|
||||
</data>
|
||||
<data name="RequestOTP" xml:space="preserve">
|
||||
<value>Αιτηθείτε τον κωδικό πρόσβασης μιας χρήσης</value>
|
||||
@@ -2260,7 +2260,7 @@
|
||||
<value>Φιλτράρισμα αντικειμένων ανά κρύπτη</value>
|
||||
</data>
|
||||
<data name="AllVaults" xml:space="preserve">
|
||||
<value>Όλες οι κρύπτες</value>
|
||||
<value>Όλα τα Vaults</value>
|
||||
</data>
|
||||
<data name="Vaults" xml:space="preserve">
|
||||
<value>Vaults</value>
|
||||
@@ -2390,19 +2390,19 @@
|
||||
<value>Τύπος Ονόματος Χρήστη</value>
|
||||
</data>
|
||||
<data name="PlusAddressedEmail" xml:space="preserve">
|
||||
<value>Συν διεύθυνση ηλ. ταχυδρομείου</value>
|
||||
<value>Συν Διεύθυνση Email</value>
|
||||
</data>
|
||||
<data name="CatchAllEmail" xml:space="preserve">
|
||||
<value>Διεύθυνση ηλ. ταχυδρομείου κάθε σκοπού</value>
|
||||
<value>Catch-all Email</value>
|
||||
</data>
|
||||
<data name="ForwardedEmailAlias" xml:space="preserve">
|
||||
<value>Προωθημένο ψευδώνυμο διεύθυνσης ηλ. ταχυδρομείου</value>
|
||||
<value>Προωθημένο Ψευδώνυμο Email</value>
|
||||
</data>
|
||||
<data name="RandomWord" xml:space="preserve">
|
||||
<value>Τυχαία Λέξη</value>
|
||||
</data>
|
||||
<data name="EmailRequiredParenthesis" xml:space="preserve">
|
||||
<value>Διεύθυνση ηλ. ταχυδρομείου (απαιτείται)</value>
|
||||
<value>Email (απαιτείται)</value>
|
||||
</data>
|
||||
<data name="DomainNameRequiredParenthesis" xml:space="preserve">
|
||||
<value>Όνομα Τομέα (απαιτείται)</value>
|
||||
@@ -2456,13 +2456,13 @@
|
||||
<value>Παρουσιάστηκε άγνωστο {0} σφάλμα.</value>
|
||||
</data>
|
||||
<data name="PlusAddressedEmailDescription" xml:space="preserve">
|
||||
<value>Χρησιμοποιήστε τις δυνατότητες δευτερεύουσας διεύθυνσης του παρόχου του ηλ. ταχυδρομείου σας</value>
|
||||
<value>Χρησιμοποιήστε τις δυνατότητες δευτερεύουσας διεύθυνσης του παρόχου email σας</value>
|
||||
</data>
|
||||
<data name="CatchAllEmailDescription" xml:space="preserve">
|
||||
<value>Χρησιμοποιήστε τα διαμορφωμένα εισερχόμενα κάθε σκοπού του τομέα σας.</value>
|
||||
<value>Χρησιμοποιήστε τα διαμορφωμένα εισερχόμενα catch-all του domain σας.</value>
|
||||
</data>
|
||||
<data name="ForwardedEmailDescription" xml:space="preserve">
|
||||
<value>Δημιουργήστε ένα ψευδώνυμο διεύθυνσης ηλ. ταχυδρομείου με μια εξωτερική υπηρεσία προώθησης.</value>
|
||||
<value>Δημιουργήστε ένα ψευδώνυμο email με μια εξωτερική υπηρεσία προώθησης.</value>
|
||||
</data>
|
||||
<data name="Random" xml:space="preserve">
|
||||
<value>Τυχαίο</value>
|
||||
@@ -2515,7 +2515,7 @@
|
||||
<value>Μια ειδοποίηση έχει σταλεί στη συσκευή σας.</value>
|
||||
</data>
|
||||
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
|
||||
<value>Βεβαιωθείτε ότι η κρύπτη σας είναι ξεκλείδωτη και ότι η Φράση δακτυλικών αποτυπωμάτων ταιριάζει στην άλλη συσκευή.</value>
|
||||
<value>Βεβαιωθείτε ότι το vault σας είναι ξεκλείδωτο και ότι η Φράση δακτυλικών αποτυπωμάτων ταιριάζει στην άλλη συσκευή.</value>
|
||||
</data>
|
||||
<data name="ResendNotification" xml:space="preserve">
|
||||
<value>Επαναποστολή ειδοποίησης</value>
|
||||
@@ -2626,7 +2626,7 @@
|
||||
<value>Περιοχή</value>
|
||||
</data>
|
||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||
<value>Ο κύριος κωδικός πρόσβασής σας δεν πληροί μία ή περισσότερες πολιτικές του οργανισμού σας. Για να αποκτήσετε πρόσβαση στη Κρύπτη σας, πρέπει να ενημερώσετε τον κύριο κωδικό πρόσβασής σας τώρα. Η διαδικασία θα σας αποσυνδέσει από την τρέχουσα συνεδρία σας, απαιτώντας από εσάς να συνδεθείτε ξανά. Οι ενεργές συνεδρίες σε άλλες συσκευές ενδέχεται να συνεχίσουν να είναι ενεργές εώς και μία ώρα.</value>
|
||||
<value>Ο κύριος κωδικός πρόσβασής σας δεν πληροί μία ή περισσότερες πολιτικές του οργανισμού σας. Για να αποκτήσετε πρόσβαση στο Vault σας, πρέπει να ενημερώσετε τον κύριο κωδικό πρόσβασής σας τώρα. Η διαδικασία θα σας αποσυνδέσει από την τρέχουσα συνεδρία σας, απαιτώντας από εσάς να συνδεθείτε ξανά. Οι ενεργές συνεδρίες σε άλλες συσκευές ενδέχεται να συνεχίσουν να είναι ενεργές εώς και μία ώρα.</value>
|
||||
</data>
|
||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||
<value>Τρέχων κύριος κωδικός</value>
|
||||
@@ -2674,7 +2674,7 @@
|
||||
<value>Διαθέσιμο για σύνδεση με δύο βήματα</value>
|
||||
</data>
|
||||
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||
<value>Βοήθεια για την απαίτηση κύριου κωδικού πρόσβασης</value>
|
||||
<value>Βοήθεια προτροπής κύριου κωδικού πρόσβασης</value>
|
||||
</data>
|
||||
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||
<value>Το ξεκλείδωμα μπορεί να αποτύχει λόγω ανεπαρκούς μνήμης. Μειώστε τις ρυθμίσεις μνήμης KDF ή ρυθμίστε το βιομετρικό ξεκλείδωμα για επίλυση.</value>
|
||||
@@ -2701,7 +2701,7 @@
|
||||
<value>Σύνδεση ως {0}</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
||||
<value>Η ενέργεια στη λήξη χρόνου της κρύπτης άλλαξε σε αποσύνδεση</value>
|
||||
<value>Η ενέργεια στη λήξη χρόνου του vault άλλαξε σε αποσύνδεση</value>
|
||||
</data>
|
||||
<data name="BlockAutoFill" xml:space="preserve">
|
||||
<value>Αποκλείστε την αυτόματη συμπλήρωση</value>
|
||||
@@ -2759,7 +2759,7 @@
|
||||
<value>Σύνδεση στο</value>
|
||||
</data>
|
||||
<data name="Vault" xml:space="preserve">
|
||||
<value>Κρύπτη</value>
|
||||
<value>Vault</value>
|
||||
</data>
|
||||
<data name="Appearance" xml:space="preserve">
|
||||
<value>Εμφάνιση</value>
|
||||
@@ -2808,7 +2808,7 @@
|
||||
<value>{0} ώρες</value>
|
||||
</data>
|
||||
<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 name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||
<value>Το Android Autofill Framework χρησιμοποιείται για να προσφέρει αυτόματη συμπλήρωση στοιχείων σύνδεσης σε άλλες εφαρμογές στη συσκευή σας.</value>
|
||||
@@ -2839,7 +2839,7 @@
|
||||
<value>Συνέχεια στο κατάστημα εφαρμογών;</value>
|
||||
</data>
|
||||
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
||||
<value>Συνέχεια στις Ρυθμίσεις συσκευής;</value>
|
||||
<value>Continue to device Settings?</value>
|
||||
</data>
|
||||
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
||||
<value>Κάντε τον λογαριασμό σας πιο ασφαλή με τη ρύθμιση δύο βημάτων σύνδεσης στην εφαρμογή διαδικτύου Bitwarden.</value>
|
||||
@@ -2848,7 +2848,7 @@
|
||||
<value>Μπορείτε να αλλάξετε τον κύριο κωδικό πρόσβασης στην εφαρμογή διαδικτύου Bitwarden.</value>
|
||||
</data>
|
||||
<data name="YouCanImportDataToYourVaultOnX" xml:space="preserve">
|
||||
<value>Μπορείτε να εισαγάγετε δεδομένα στη κρύπτη σας στο {0}.</value>
|
||||
<value>Μπορείτε να εισαγάγετε δεδομένα στο vault σας στο {0}.</value>
|
||||
<comment>The parameter is an URL, like vault.bitwarden.com.</comment>
|
||||
</data>
|
||||
<data name="LearnMoreAboutHowToUseBitwardenOnTheHelpCenter" xml:space="preserve">
|
||||
@@ -2864,7 +2864,7 @@
|
||||
<value>Εξερευνήστε περισσότερες δυνατότητες του Bitwarden λογαριασμού σας, στην εφαρμογή διαδικτύου.</value>
|
||||
</data>
|
||||
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
||||
<value>Το Bitwarden σας επιτρέπει να μοιράζεστε τα στοιχεία της κρύπτης σας με άλλους, χρησιμοποιώντας έναν λογαριασμό οργανισμού. Μάθετε περισσότερα στην ιστοσελίδα bitwarden.com.</value>
|
||||
<value>Το Bitwarden σας επιτρέπει να μοιράζεστε τα στοιχεία του vault σας με άλλους, χρησιμοποιώντας έναν λογαριασμό οργανισμού. Μάθετε περισσότερα στην ιστοσελίδα bitwarden.com.</value>
|
||||
</data>
|
||||
<data name="RateAppDescriptionLong" xml:space="preserve">
|
||||
<value>Βοηθήστε άλλους να μάθουν αν το Bitwarden είναι κατάλληλο για αυτούς. Επισκεφθείτε το κατάστημα εφαρμογών και αφήστε τώρα μια βαθμολογία.</value>
|
||||
@@ -2889,28 +2889,28 @@
|
||||
<value>Ο οργανισμός σας απαιτεί να ορίσετε έναν κύριο κωδικό πρόσβασης.</value>
|
||||
</data>
|
||||
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
||||
<value>Ρυθμίστε μια επιλογή κλειδώματος για να αλλάξετε την ενέργεια στη λήξη χρόνου της κρύπτης σας.</value>
|
||||
<value>Ρυθμίστε μια επιλογή κλειδώματος για να αλλάξετε την ενέργεια στη λήξη χρόνου του vault σας.</value>
|
||||
</data>
|
||||
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||
<value>Επιλέξτε μια σύνδεση στην οποία θα αποθηκεύσετε αυτό το κλειδί πρόσβασης</value>
|
||||
<value>Choose a login to save this passkey to</value>
|
||||
</data>
|
||||
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||
<value>Αποθήκευση κλειδιού πρόσβασης ως νέα σύνδεση</value>
|
||||
<value>Save passkey as new login</value>
|
||||
</data>
|
||||
<data name="SavePasskey" xml:space="preserve">
|
||||
<value>Αποθήκευση κλειδιού πρόσβασης</value>
|
||||
<value>Save passkey</value>
|
||||
</data>
|
||||
<data name="PasskeysForX" xml:space="preserve">
|
||||
<value>Κλεισιά πρόσβασης για {0}</value>
|
||||
<value>Passkeys for {0}</value>
|
||||
</data>
|
||||
<data name="PasswordsForX" xml:space="preserve">
|
||||
<value>Κωδικοί πρόσβασης για {0}</value>
|
||||
<value>Passwords for {0}</value>
|
||||
</data>
|
||||
<data name="OverwritePasskey" xml:space="preserve">
|
||||
<value>Αντικατάσταση κλειδιού πρόσβασης;</value>
|
||||
<value>Overwrite passkey?</value>
|
||||
</data>
|
||||
<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 name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
||||
<value>Duo σύνδεση δύο βημάτων απαιτείται για το λογαριασμό σας. </value>
|
||||
@@ -2922,27 +2922,27 @@
|
||||
<value>Εκκίνηση Duo</value>
|
||||
</data>
|
||||
<data name="VerificationRequiredByX" xml:space="preserve">
|
||||
<value>Απαιτείται επαλήθευση από {0}</value>
|
||||
<value>Verification required by {0}</value>
|
||||
</data>
|
||||
<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 name="ErrorCreatingPasskey" xml:space="preserve">
|
||||
<value>Σφάλμα δημιουργίας κλειδιού πρόσβασης</value>
|
||||
<value>Error creating passkey</value>
|
||||
</data>
|
||||
<data name="ErrorReadingPasskey" xml:space="preserve">
|
||||
<value>Σφάλμα ανάγνωσης κλειδιού πρόσβασης</value>
|
||||
<value>Error reading passkey</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||
<value>Επαλήθευση ταυτότητας...</value>
|
||||
<value>Verifying identity...</value>
|
||||
</data>
|
||||
<data name="Passwords" xml:space="preserve">
|
||||
<value>Κωδικοί</value>
|
||||
@@ -2954,42 +2954,42 @@
|
||||
<value>Ρύθμιση αυτόματης συμπλήρωσης</value>
|
||||
</data>
|
||||
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
||||
<value>Αποκτήστε άμεση πρόσβαση στους κωδικούς και κλειδιά πρόσβασής σας!</value>
|
||||
<value>Get instant access to your passwords and passkeys!</value>
|
||||
</data>
|
||||
<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 name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
||||
<value>1. Πηγαίνετε στις Ρυθμίσεις συσκευής > Κωδικοί Πρόσβασης > Επιλογές Κωδικού Πρόσβασης</value>
|
||||
<value>1. Go to your device's Settings > Passwords > Password Options</value>
|
||||
</data>
|
||||
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
||||
<value>2. Ενεργοποιήστε την Αυτόματη Συμπλήρωση</value>
|
||||
<value>2. Turn on AutoFill</value>
|
||||
</data>
|
||||
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
||||
<value>3. Επιλέξτε "Bitwarden" για να χρησιμοποιήσετε για τους κωδικούς και τα κλειδιά πρόσβασης</value>
|
||||
<value>3. Select "Bitwarden" to use for passwords and passkeys</value>
|
||||
</data>
|
||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
||||
<value>Το κλειδί πρόσβασής σας θα αποθηκευτεί στη κρύπτη του Bitwarden σας</value>
|
||||
<value>Your passkey will be saved to your Bitwarden vault</value>
|
||||
</data>
|
||||
<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="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||
<value>Δεν υποστηρίζονται κλειδιά πρόσβασης για αυτήν την εφαρμογή</value>
|
||||
<value>Passkeys not supported for this app</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
||||
<value>Αποτυχία λειτουργίας κλειδιού πρόσβασης επειδή ο περιηγητής δεν είναι προνομιούχος</value>
|
||||
<value>Passkey operation failed because browser is not privileged</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
||||
<value>Η λειτουργία κλειδιού πρόσβασης απέτυχε επειδή η υπογραφή του περιηγητή δεν ταιριάζει</value>
|
||||
<value>Passkey operation failed because browser signature does not match</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
||||
<value>Η λειτουργία κλειδιού πρόσβασης απέτυχε λόγω των ελλείποντων συνδέσμων στοιχείων</value>
|
||||
<value>Passkey operation failed because of missing asset links</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseAppNotFoundInAssetLinks" xml:space="preserve">
|
||||
<value>Αποτυχία λειτουργίας κλειδιού πρόσβασης επειδή η εφαρμογή δεν βρέθηκε στους συνδέσμους στοιχείων</value>
|
||||
<value>Passkey operation failed because app not found in asset links</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
||||
<value>Αποτυχία λειτουργίας κλειδιού πρόσβασης επειδή δεν ήταν δυνατή η επαλήθευση της εφαρμογής</value>
|
||||
<value>Passkey operation failed because app could not be verified</value>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -422,7 +422,7 @@
|
||||
<value>Automaattäite teenus</value>
|
||||
</data>
|
||||
<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 name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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 name="LearnMore" xml:space="preserve">
|
||||
<value>Rohkem teavet</value>
|
||||
@@ -1195,7 +1195,7 @@ Skaneerimine toimub automaatselt.</value>
|
||||
<value>Windows Hello</value>
|
||||
</data>
|
||||
<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 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>
|
||||
@@ -1460,11 +1460,11 @@ Skaneerimine toimub automaatselt.</value>
|
||||
<value>Puuduvad kaustad, mida kuvada.</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="PasskeyManagement" xml:space="preserve">
|
||||
<value>Pääsuvõtme haldamine</value>
|
||||
<value>Passkey management</value>
|
||||
</data>
|
||||
<data name="AutofillServices" xml:space="preserve">
|
||||
<value>Automaattäite teenused</value>
|
||||
@@ -2471,10 +2471,10 @@ Skaneerimine toimub automaatselt.</value>
|
||||
<value>Ühenda kellaga</value>
|
||||
</data>
|
||||
<data name="AccessibilityServiceDisclosure" xml:space="preserve">
|
||||
<value>Juurdepääsetavuse Teenuse Teavitus</value>
|
||||
<value>Accessibility Service Disclosure</value>
|
||||
</data>
|
||||
<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 name="Accept" xml:space="preserve">
|
||||
<value>Nõustu</value>
|
||||
@@ -2515,7 +2515,7 @@ Soovid selle konto peale lülituda?</value>
|
||||
<value>Sinu seadmesse saadeti teavitus.</value>
|
||||
</data>
|
||||
<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 name="ResendNotification" xml:space="preserve">
|
||||
<value>Saada märguanne uuesti</value>
|
||||
@@ -2632,22 +2632,22 @@ Soovid selle konto peale lülituda?</value>
|
||||
<value>Praegune ülemparool</value>
|
||||
</data>
|
||||
<data name="LoggedIn" xml:space="preserve">
|
||||
<value>Sisse logitud!</value>
|
||||
<value>Logged in!</value>
|
||||
</data>
|
||||
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
|
||||
<value>Kinnita teises seadmes</value>
|
||||
<value>Approve with my other device</value>
|
||||
</data>
|
||||
<data name="RequestAdminApproval" xml:space="preserve">
|
||||
<value>Küsi administraatori nõusolekut</value>
|
||||
<value>Request admin approval</value>
|
||||
</data>
|
||||
<data name="ApproveWithMasterPassword" xml:space="preserve">
|
||||
<value>Kinnita ülemparooliga</value>
|
||||
<value>Approve with master password</value>
|
||||
</data>
|
||||
<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 name="RememberThisDevice" xml:space="preserve">
|
||||
<value>Hoia see seade meeles</value>
|
||||
<value>Remember this device</value>
|
||||
</data>
|
||||
<data name="Passkey" xml:space="preserve">
|
||||
<value>Pääsukood</value>
|
||||
@@ -2674,10 +2674,10 @@ Soovid selle konto peale lülituda?</value>
|
||||
<value>Saadaval kaheastmelise kinnitamise jaoks</value>
|
||||
</data>
|
||||
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||
<value>Abi ülemparooli uuesti küsimisega</value>
|
||||
<value>Master password re-prompt help</value>
|
||||
</data>
|
||||
<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 name="InvalidAPIKey" xml:space="preserve">
|
||||
<value>Vigane API võti</value>
|
||||
@@ -2686,22 +2686,22 @@ Soovid selle konto peale lülituda?</value>
|
||||
<value>Vigane API token</value>
|
||||
</data>
|
||||
<data name="AdminApprovalRequested" xml:space="preserve">
|
||||
<value>Taotlus administraatorile saadetud</value>
|
||||
<value>Admin approval requested</value>
|
||||
</data>
|
||||
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
|
||||
<value>Sinu taotlus saadeti administraatorile.</value>
|
||||
<value>Your request has been sent to your admin.</value>
|
||||
</data>
|
||||
<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 name="TroubleLoggingIn" xml:space="preserve">
|
||||
<value>Ei õnnestu sisse logida?</value>
|
||||
<value>Trouble logging in?</value>
|
||||
</data>
|
||||
<data name="LoggingInAsX" xml:space="preserve">
|
||||
<value>Login sisse kui {0}</value>
|
||||
<value>Logging in as {0}</value>
|
||||
</data>
|
||||
<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 name="BlockAutoFill" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="LoginApproved" xml:space="preserve">
|
||||
<value>Sisselogimine kinnitatud</value>
|
||||
<value>Login approved</value>
|
||||
</data>
|
||||
<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 name="LogInWithDevice" xml:space="preserve">
|
||||
<value>Logi sisse teise seadmega</value>
|
||||
<value>Log in with device</value>
|
||||
</data>
|
||||
<data name="LoggingInOn" xml:space="preserve">
|
||||
<value>Sisselogimas kui</value>
|
||||
@@ -2780,216 +2780,216 @@ Soovid selle konto peale lülituda?</value>
|
||||
<value>Sünkroniseeri kohe</value>
|
||||
</data>
|
||||
<data name="UnlockOptions" xml:space="preserve">
|
||||
<value>Avamise valikud</value>
|
||||
<value>Unlock options</value>
|
||||
</data>
|
||||
<data name="SessionTimeout" xml:space="preserve">
|
||||
<value>Sessiooni ajalõpp</value>
|
||||
</data>
|
||||
<data name="SessionTimeoutAction" xml:space="preserve">
|
||||
<value>Ajalõpule järgnev tegevus</value>
|
||||
<value>Session timeout action</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="OneHourAndOneMinute" xml:space="preserve">
|
||||
<value>Üks tund ja üks minut</value>
|
||||
<value>One hour and one minute</value>
|
||||
</data>
|
||||
<data name="OneHourAndXMinute" xml:space="preserve">
|
||||
<value>Üks tund ja {0} minutit</value>
|
||||
<value>One hour and {0} minutes</value>
|
||||
</data>
|
||||
<data name="XHoursAndOneMinute" xml:space="preserve">
|
||||
<value>{0} tundi ja üks minut</value>
|
||||
<value>{0} hours and one minute</value>
|
||||
</data>
|
||||
<data name="XHoursAndYMinutes" xml:space="preserve">
|
||||
<value>{0} tundi ja {1} minutit</value>
|
||||
<value>{0} hours and {1} minutes</value>
|
||||
</data>
|
||||
<data name="XHours" xml:space="preserve">
|
||||
<value>{0} tundi</value>
|
||||
<value>{0} hours</value>
|
||||
</data>
|
||||
<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 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 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 name="AdditionalOptions" xml:space="preserve">
|
||||
<value>Muud valikud</value>
|
||||
<value>Additional options</value>
|
||||
</data>
|
||||
<data name="ContinueToWebApp" xml:space="preserve">
|
||||
<value>Jätka veebibrauseris?</value>
|
||||
<value>Continue to web app?</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="ContinueToHelpCenter" xml:space="preserve">
|
||||
<value>Ava Abikeskus?</value>
|
||||
<value>Continue to Help center?</value>
|
||||
</data>
|
||||
<data name="ContinueToContactSupport" xml:space="preserve">
|
||||
<value>Kas soovid avada klienditoe vormi?</value>
|
||||
<value>Continue to contact support?</value>
|
||||
</data>
|
||||
<data name="ContinueToPrivacyPolicy" xml:space="preserve">
|
||||
<value>Ava privaatsuspoliitika?</value>
|
||||
<value>Continue to privacy policy?</value>
|
||||
</data>
|
||||
<data name="ContinueToAppStore" xml:space="preserve">
|
||||
<value>Kas soovid avada enda rakenduste poe?</value>
|
||||
<value>Continue to app store?</value>
|
||||
</data>
|
||||
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
||||
<value>Ava Seaded?</value>
|
||||
<value>Continue to device Settings?</value>
|
||||
</data>
|
||||
<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 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 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>
|
||||
</data>
|
||||
<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 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 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 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 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 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 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 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>
|
||||
</data>
|
||||
<data name="TooManyAttempts" xml:space="preserve">
|
||||
<value>Liiga palju katseid</value>
|
||||
<value>Too many attempts</value>
|
||||
</data>
|
||||
<data name="AccountLoggedOutBiometricExceeded" xml:space="preserve">
|
||||
<value>Edukalt välja logitud.</value>
|
||||
<value>Account logged out.</value>
|
||||
</data>
|
||||
<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 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 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 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 name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||
<value>Salvesta pääsuvõti uude kirjesse</value>
|
||||
<value>Save passkey as new login</value>
|
||||
</data>
|
||||
<data name="SavePasskey" xml:space="preserve">
|
||||
<value>Salvesta pääsuvõti</value>
|
||||
<value>Save passkey</value>
|
||||
</data>
|
||||
<data name="PasskeysForX" xml:space="preserve">
|
||||
<value>Kasutaja {0} pääsuvõtmed</value>
|
||||
<value>Passkeys for {0}</value>
|
||||
</data>
|
||||
<data name="PasswordsForX" xml:space="preserve">
|
||||
<value>Kasutaja {0} paroolid</value>
|
||||
<value>Passwords for {0}</value>
|
||||
</data>
|
||||
<data name="OverwritePasskey" xml:space="preserve">
|
||||
<value>Kas soovid pääsuvõtme üle kirjutada?</value>
|
||||
<value>Overwrite passkey?</value>
|
||||
</data>
|
||||
<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 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 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 name="LaunchDuo" xml:space="preserve">
|
||||
<value>Käivita Duo</value>
|
||||
<value>Launch Duo</value>
|
||||
</data>
|
||||
<data name="VerificationRequiredByX" xml:space="preserve">
|
||||
<value>{0} nõuab kinnitamist</value>
|
||||
<value>Verification required by {0}</value>
|
||||
</data>
|
||||
<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 name="ErrorCreatingPasskey" xml:space="preserve">
|
||||
<value>Pääsuvõtme loomine ebaõnnestus</value>
|
||||
<value>Error creating passkey</value>
|
||||
</data>
|
||||
<data name="ErrorReadingPasskey" xml:space="preserve">
|
||||
<value>Pääsuvõtme lugemine ebaõnnestus</value>
|
||||
<value>Error reading passkey</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||
<value>Kinnitan sinu isikut...</value>
|
||||
<value>Verifying identity...</value>
|
||||
</data>
|
||||
<data name="Passwords" xml:space="preserve">
|
||||
<value>Paroolid</value>
|
||||
<value>Passwords</value>
|
||||
</data>
|
||||
<data name="UnknownAccount" xml:space="preserve">
|
||||
<value>Tundmatu konto</value>
|
||||
<value>Unknown account</value>
|
||||
</data>
|
||||
<data name="SetUpAutofill" xml:space="preserve">
|
||||
<value>Seadista automaatne täitmine</value>
|
||||
<value>Set up auto-fill</value>
|
||||
</data>
|
||||
<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 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 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 name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
||||
<value>2. Lülita AutoFill sisse</value>
|
||||
<value>2. Turn on AutoFill</value>
|
||||
</data>
|
||||
<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 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 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="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||
<value>See rakendus ei toeta pääsuvõtmeid</value>
|
||||
<value>Passkeys not supported for this app</value>
|
||||
</data>
|
||||
<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 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 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 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 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>
|
||||
</root>
|
||||
|
||||
@@ -422,7 +422,7 @@
|
||||
<value>Automaattitäytön palvelu</value>
|
||||
</data>
|
||||
<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 name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||
<value>Vältä epäselviä merkkejä</value>
|
||||
@@ -556,7 +556,7 @@
|
||||
<value>Holvin aikakatkaisutoiminto</value>
|
||||
</data>
|
||||
<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 name="LoggingIn" xml:space="preserve">
|
||||
<value>Kirjaudutaan sisään…</value>
|
||||
@@ -813,11 +813,11 @@
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="LoginUnavailable" xml:space="preserve">
|
||||
@@ -843,7 +843,7 @@
|
||||
<value>Kaksivaiheisen kirjautumisen asetukset</value>
|
||||
</data>
|
||||
<data name="UseAnotherTwoStepMethod" xml:space="preserve">
|
||||
<value>Käytä vaihtoehtoista todennustapaa</value>
|
||||
<value>Käytä eri kaksivaiheisen kirjautumisen todennusmenetelmää</value>
|
||||
</data>
|
||||
<data name="VerificationEmailNotSent" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="AddNewAttachment" xml:space="preserve">
|
||||
@@ -907,13 +907,13 @@ Koodi skannataan automaattisesti.</value>
|
||||
<value>Kuvat</value>
|
||||
</data>
|
||||
<data name="CopyTotp" xml:space="preserve">
|
||||
<value>Kopioi TOTP-koodi</value>
|
||||
<value>Kopioi TOTP-todennuskoodi</value>
|
||||
</data>
|
||||
<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 name="CopyTotpAutomatically" xml:space="preserve">
|
||||
<value>Kopioi TOTP-koodi automaattisesti</value>
|
||||
<value>TOTP-koodin kopiointi</value>
|
||||
</data>
|
||||
<data name="PremiumRequired" xml:space="preserve">
|
||||
<value>Käyttääksesi tätä toimintoa tarvitset Premium-jäsenyyden.</value>
|
||||
@@ -1134,7 +1134,7 @@ Koodi skannataan automaattisesti.</value>
|
||||
<value>Osoite</value>
|
||||
</data>
|
||||
<data name="Expiration" xml:space="preserve">
|
||||
<value>Voimassaolo päättyy</value>
|
||||
<value>Erääntymisaika</value>
|
||||
</data>
|
||||
<data name="ShowWebsiteIcons" xml:space="preserve">
|
||||
<value>Näytä sivustokuvakkeet</value>
|
||||
@@ -1195,7 +1195,7 @@ Koodi skannataan automaattisesti.</value>
|
||||
<value>Windows Hello</value>
|
||||
</data>
|
||||
<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 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>
|
||||
@@ -1496,13 +1496,13 @@ Koodi skannataan automaattisesti.</value>
|
||||
<comment>ex: Logged in as user@example.com on bitwarden.com.</comment>
|
||||
</data>
|
||||
<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 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 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 name="Dark" xml:space="preserve">
|
||||
<value>Tumma</value>
|
||||
@@ -1592,7 +1592,7 @@ Koodi skannataan automaattisesti.</value>
|
||||
<value>Kun sovellus käynnistetään uudelleen</value>
|
||||
</data>
|
||||
<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 name="ThemeAppliedOnRestart" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="PasskeyManagement" xml:space="preserve">
|
||||
<value>Pääsyavainhallinta</value>
|
||||
<value>Suojausavainhallinta</value>
|
||||
</data>
|
||||
<data name="AutofillServices" xml:space="preserve">
|
||||
<value>Automaattitäytön palvelut</value>
|
||||
@@ -1931,7 +1931,7 @@ Koodi skannataan automaattisesti.</value>
|
||||
<value>Erääntymispäivä</value>
|
||||
</data>
|
||||
<data name="ExpirationTime" xml:space="preserve">
|
||||
<value>Voimassaolo päättyy</value>
|
||||
<value>Erääntymisaika</value>
|
||||
</data>
|
||||
<data name="ExpirationDateInfo" xml:space="preserve">
|
||||
<value>Send erääntyy määritettynä ajankohtana.</value>
|
||||
@@ -2120,10 +2120,10 @@ Koodi skannataan automaattisesti.</value>
|
||||
<value>FIDO2 WebAuthn</value>
|
||||
</data>
|
||||
<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 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 name="Fido2AuthenticateWebAuthn" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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 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 name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="NeverLockWarning" xml:space="preserve">
|
||||
@@ -2516,7 +2516,7 @@ Haluatko vaihtaa tähän tiliin?</value>
|
||||
<value>Laitteellesi on lähetetty ilmoitus.</value>
|
||||
</data>
|
||||
<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 name="ResendNotification" xml:space="preserve">
|
||||
<value>Lähetä ilmoitus uudelleen</value>
|
||||
@@ -2564,7 +2564,7 @@ Haluatko vaihtaa tähän tiliin?</value>
|
||||
<value>Tärkeää</value>
|
||||
</data>
|
||||
<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 name="WeakMasterPassword" xml:space="preserve">
|
||||
<value>Heikko pääsalasana</value>
|
||||
@@ -2651,22 +2651,22 @@ Haluatko vaihtaa tähän tiliin?</value>
|
||||
<value>Muista tämä laite</value>
|
||||
</data>
|
||||
<data name="Passkey" xml:space="preserve">
|
||||
<value>Pääsyavain</value>
|
||||
<value>Suojausavain</value>
|
||||
</data>
|
||||
<data name="Passkeys" xml:space="preserve">
|
||||
<value>Pääsyavaimet</value>
|
||||
<value>Suojausavaimet</value>
|
||||
</data>
|
||||
<data name="Application" xml:space="preserve">
|
||||
<value>Sovellus</value>
|
||||
</data>
|
||||
<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 name="PasskeyWillNotBeCopied" xml:space="preserve">
|
||||
<value>Pääsyavainta ei kopioida</value>
|
||||
<value>Suojausavainta ei kopioida</value>
|
||||
</data>
|
||||
<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 name="CopyApplication" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="OneHourAndOneMinute" xml:space="preserve">
|
||||
<value>Tunti ja minuutti</value>
|
||||
<value>1 tunti 1 minuutti</value>
|
||||
</data>
|
||||
<data name="OneHourAndXMinute" xml:space="preserve">
|
||||
<value>Tunti ja {0} minuuttia</value>
|
||||
<value>1 tunti {0} minuuttia</value>
|
||||
</data>
|
||||
<data name="XHoursAndOneMinute" xml:space="preserve">
|
||||
<value>{0} tuntia ja minuutti</value>
|
||||
<value>{0} tuntia 1 minuutti</value>
|
||||
</data>
|
||||
<data name="XHoursAndYMinutes" xml:space="preserve">
|
||||
<value>{0} tuntia {1} minuuttia</value>
|
||||
@@ -2809,7 +2809,7 @@ Haluatko vaihtaa tähän tiliin?</value>
|
||||
<value>{0} tuntia</value>
|
||||
</data>
|
||||
<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 name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||
<value>Valitse kirjautumistieto, johon pääsyavain tallennetaan</value>
|
||||
<value>Valitse kirjautumistieto, johon suojausavain tallennetaan</value>
|
||||
</data>
|
||||
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||
<value>Tallenna pääsyavain uuteen kirjautumistietoon</value>
|
||||
<value>Tallenna suojausavain uuteen kirjautumistietoon</value>
|
||||
</data>
|
||||
<data name="SavePasskey" xml:space="preserve">
|
||||
<value>Tallenna pääsyavain</value>
|
||||
<value>Tallenna suojausavain</value>
|
||||
</data>
|
||||
<data name="PasskeysForX" xml:space="preserve">
|
||||
<value>Pääsyavaimet osoitteelle {0}</value>
|
||||
<value>Suojausavaimet kohteelle {0}</value>
|
||||
</data>
|
||||
<data name="PasswordsForX" xml:space="preserve">
|
||||
<value>Salasanat kohteelle {0}</value>
|
||||
</data>
|
||||
<data name="OverwritePasskey" xml:space="preserve">
|
||||
<value>Korvataanko pääsyavain?</value>
|
||||
<value>Korvataanko suojausavain?</value>
|
||||
</data>
|
||||
<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 name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
||||
<value>Virhe luotaessa pääsyavainta</value>
|
||||
<value>Virhe luotaessa suojausavainta</value>
|
||||
</data>
|
||||
<data name="ErrorReadingPasskey" xml:space="preserve">
|
||||
<value>Virhe luettaessa pääsyavainta</value>
|
||||
<value>Virhe luettaessa suojausavainta</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||
@@ -2955,42 +2955,42 @@ Haluatko vaihtaa tähän tiliin?</value>
|
||||
<value>Määritä automaattitäyttö</value>
|
||||
</data>
|
||||
<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 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 name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
||||
<value>1. Avaa laitteesi Asetukset > Salasanat > Salasanavalinnat</value>
|
||||
</data>
|
||||
<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 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 name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
||||
<value>Pääsyavaimesi tallennetaan Bitwarden-holviisi</value>
|
||||
<value>Suojausavaimesi tallennetaan Bitwarden-holviisi</value>
|
||||
</data>
|
||||
<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="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||
<value>Pääsyavaimia ei tueta tässä sovelluksessa</value>
|
||||
<value>Suojausavaimia ei tueta tässä sovelluksessa</value>
|
||||
</data>
|
||||
<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 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 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 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 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>
|
||||
</root>
|
||||
|
||||
@@ -1195,7 +1195,7 @@ La numérisation se fera automatiquement.</value>
|
||||
<value>Windows Hello</value>
|
||||
</data>
|
||||
<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 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>
|
||||
@@ -2840,7 +2840,7 @@ Voulez-vous basculer vers ce compte ?</value>
|
||||
<value>Continuer vers la boutique des applications ?</value>
|
||||
</data>
|
||||
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
||||
<value>Continuer vers les paramètres de l'appareil ?</value>
|
||||
<value>Continue to device Settings?</value>
|
||||
</data>
|
||||
<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>
|
||||
@@ -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>
|
||||
</data>
|
||||
<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 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 name="SavePasskey" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="OverwritePasskey" xml:space="preserve">
|
||||
<value>Écraser la clé d'accès ?</value>
|
||||
<value>Overwrite passkey?</value>
|
||||
</data>
|
||||
<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 name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="VerificationRequiredByX" xml:space="preserve">
|
||||
<value>Vérification requise par {0}</value>
|
||||
<value>Verification required by {0}</value>
|
||||
</data>
|
||||
<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 name="ErrorCreatingPasskey" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||
<value>Vérification de l'identité...</value>
|
||||
<value>Verifying identity...</value>
|
||||
</data>
|
||||
<data name="Passwords" xml:space="preserve">
|
||||
<value>Mots de passe</value>
|
||||
</data>
|
||||
<data name="UnknownAccount" xml:space="preserve">
|
||||
<value>Compte inconnu</value>
|
||||
<value>Unknown account</value>
|
||||
</data>
|
||||
<data name="SetUpAutofill" xml:space="preserve">
|
||||
<value>Configurer la saisie automatique</value>
|
||||
<value>Set up auto-fill</value>
|
||||
</data>
|
||||
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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 name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
||||
<value>2. Activer la saisie automatique</value>
|
||||
<value>2. Turn on AutoFill</value>
|
||||
</data>
|
||||
<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>
|
||||
@@ -2982,7 +2982,7 @@ Voulez-vous basculer vers ce compte ?</value>
|
||||
<value>Passkey operation failed because browser is not privileged</value>
|
||||
</data>
|
||||
<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 name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
||||
<value>Passkey operation failed because of missing asset links</value>
|
||||
@@ -2991,6 +2991,6 @@ Voulez-vous basculer vers ce compte ?</value>
|
||||
<value>Passkey operation failed because app not found in asset links</value>
|
||||
</data>
|
||||
<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>
|
||||
</root>
|
||||
|
||||
@@ -296,67 +296,67 @@
|
||||
<comment>Text to define that there are more options things to see.</comment>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="Authenticator" xml:space="preserve">
|
||||
<value>Autenticador</value>
|
||||
<value>Authenticator</value>
|
||||
<comment>Authenticator TOTP feature</comment>
|
||||
</data>
|
||||
<data name="Name" xml:space="preserve">
|
||||
<value>Nome</value>
|
||||
<value>Name</value>
|
||||
<comment>Label for an entity name.</comment>
|
||||
</data>
|
||||
<data name="No" xml:space="preserve">
|
||||
<value>Non</value>
|
||||
<value>No</value>
|
||||
</data>
|
||||
<data name="Notes" xml:space="preserve">
|
||||
<value>Notas</value>
|
||||
<value>Notes</value>
|
||||
<comment>Label for notes.</comment>
|
||||
</data>
|
||||
<data name="Ok" xml:space="preserve">
|
||||
<value>Aceptar</value>
|
||||
<value>Ok</value>
|
||||
<comment>Acknowledgement.</comment>
|
||||
</data>
|
||||
<data name="Password" xml:space="preserve">
|
||||
<value>Contrasinal</value>
|
||||
<value>Password</value>
|
||||
<comment>Label for a password.</comment>
|
||||
</data>
|
||||
<data name="Save" xml:space="preserve">
|
||||
<value>Gardar</value>
|
||||
<value>Save</value>
|
||||
<comment>Button text for a save operation (verb).</comment>
|
||||
</data>
|
||||
<data name="Move" xml:space="preserve">
|
||||
<value>Mover</value>
|
||||
<value>Move</value>
|
||||
</data>
|
||||
<data name="Saving" xml:space="preserve">
|
||||
<value>Gardando...</value>
|
||||
<value>Saving...</value>
|
||||
<comment>Message shown when interacting with the server</comment>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>Axustes</value>
|
||||
<value>Settings</value>
|
||||
<comment>The title for the settings page.</comment>
|
||||
</data>
|
||||
<data name="Show" xml:space="preserve">
|
||||
<value>Amosar</value>
|
||||
<value>Show</value>
|
||||
<comment>Reveal a hidden value (password).</comment>
|
||||
</data>
|
||||
<data name="ItemDeleted" xml:space="preserve">
|
||||
<value>Elemento eliminado</value>
|
||||
<value>Item deleted</value>
|
||||
<comment>Confirmation message after successfully deleting a login.</comment>
|
||||
</data>
|
||||
<data name="Submit" xml:space="preserve">
|
||||
<value>Enviar</value>
|
||||
<value>Submit</value>
|
||||
</data>
|
||||
<data name="Sync" xml:space="preserve">
|
||||
<value>Sincronizar</value>
|
||||
<value>Sync</value>
|
||||
<comment>The title for the sync page.</comment>
|
||||
</data>
|
||||
<data name="ThankYou" xml:space="preserve">
|
||||
<value>Grazas</value>
|
||||
<value>Thank you</value>
|
||||
</data>
|
||||
<data name="Tools" xml:space="preserve">
|
||||
<value>Ferramentas</value>
|
||||
<value>Tools</value>
|
||||
<comment>The title for the tools page.</comment>
|
||||
</data>
|
||||
<data name="URI" xml:space="preserve">
|
||||
@@ -364,53 +364,53 @@
|
||||
<comment>Label for a uri/url.</comment>
|
||||
</data>
|
||||
<data name="UseFingerprintToUnlock" xml:space="preserve">
|
||||
<value>Engade unha pegada dactilar para desbloquear</value>
|
||||
<value>Use fingerprint to unlock</value>
|
||||
</data>
|
||||
<data name="Username" xml:space="preserve">
|
||||
<value>Nome de usuario</value>
|
||||
<value>Username</value>
|
||||
<comment>Label for a username.</comment>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="VerifyFingerprint" xml:space="preserve">
|
||||
<value>Verifica a pegada dixital</value>
|
||||
<value>Verify fingerprint</value>
|
||||
</data>
|
||||
<data name="VerifyMasterPassword" xml:space="preserve">
|
||||
<value>Verifica o contrasinal mestre</value>
|
||||
<value>Verify master password</value>
|
||||
</data>
|
||||
<data name="VerifyPIN" xml:space="preserve">
|
||||
<value>Verifica o PIN</value>
|
||||
<value>Verify PIN</value>
|
||||
</data>
|
||||
<data name="Version" xml:space="preserve">
|
||||
<value>Versión</value>
|
||||
<value>Version</value>
|
||||
</data>
|
||||
<data name="View" xml:space="preserve">
|
||||
<value>Vista</value>
|
||||
<value>View</value>
|
||||
</data>
|
||||
<data name="VisitOurWebsite" xml:space="preserve">
|
||||
<value>Visita o noso sitio web</value>
|
||||
<value>Visit our website</value>
|
||||
</data>
|
||||
<data name="Website" xml:space="preserve">
|
||||
<value>Sitio web</value>
|
||||
<value>Website</value>
|
||||
<comment>Label for a website.</comment>
|
||||
</data>
|
||||
<data name="Yes" xml:space="preserve">
|
||||
<value>Si</value>
|
||||
<value>Yes</value>
|
||||
</data>
|
||||
<data name="Account" xml:space="preserve">
|
||||
<value>Conta</value>
|
||||
<value>Account</value>
|
||||
</data>
|
||||
<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 name="AddAnItem" xml:space="preserve">
|
||||
<value>Engadir un elemento</value>
|
||||
<value>Add an Item</value>
|
||||
</data>
|
||||
<data name="AppExtension" xml:space="preserve">
|
||||
<value>App extension</value>
|
||||
|
||||
@@ -229,7 +229,7 @@
|
||||
<value>תיקיות</value>
|
||||
</data>
|
||||
<data name="FolderUpdated" xml:space="preserve">
|
||||
<value>תיקיה עודכנה</value>
|
||||
<value>תיקיה עודכנה.</value>
|
||||
</data>
|
||||
<data name="GoToWebsite" xml:space="preserve">
|
||||
<value>עבור לאתר</value>
|
||||
@@ -1138,10 +1138,10 @@ Bitwarden בעזרת פתיחת חלון "הגדרות".</value>
|
||||
<value>תוקף</value>
|
||||
</data>
|
||||
<data name="ShowWebsiteIcons" xml:space="preserve">
|
||||
<value>הצג סמלים של אתרי האינטרננט</value>
|
||||
<value>Show website icons</value>
|
||||
</data>
|
||||
<data name="ShowWebsiteIconsDescription" xml:space="preserve">
|
||||
<value>הצג תמונה מוכרת בכל נסיון התחברות.</value>
|
||||
<value>Show a recognizable image next to each login.</value>
|
||||
</data>
|
||||
<data name="IconsUrl" xml:space="preserve">
|
||||
<value>כתובת השרת עבור האייקון</value>
|
||||
@@ -1385,13 +1385,13 @@ Bitwarden בעזרת פתיחת חלון "הגדרות".</value>
|
||||
<value>חפש אוסף</value>
|
||||
</data>
|
||||
<data name="SearchFileSends" xml:space="preserve">
|
||||
<value>חיפוש Send קבצים</value>
|
||||
<value>Search file Sends</value>
|
||||
</data>
|
||||
<data name="SearchTextSends" xml:space="preserve">
|
||||
<value>חיפוש Send טקסט</value>
|
||||
<value>Search text Sends</value>
|
||||
</data>
|
||||
<data name="SearchGroup" xml:space="preserve">
|
||||
<value>חיפוש {0}</value>
|
||||
<value>Search {0}</value>
|
||||
<comment>ex: Search Logins</comment>
|
||||
</data>
|
||||
<data name="Type" xml:space="preserve">
|
||||
@@ -1555,7 +1555,7 @@ Bitwarden בעזרת פתיחת חלון "הגדרות".</value>
|
||||
<value>ברירת מחדל (מערכת)</value>
|
||||
</data>
|
||||
<data name="DefaultDarkTheme" xml:space="preserve">
|
||||
<value>ערכת נושא כהה כברירת מחדל</value>
|
||||
<value>Default dark theme</value>
|
||||
</data>
|
||||
<data name="CopyNotes" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="AutofillBlockedUris" xml:space="preserve">
|
||||
<value>מילוי אוטומטי של כתובות חסומות</value>
|
||||
<value>Auto-fill blocked URIs</value>
|
||||
</data>
|
||||
<data name="AskToAddLogin" xml:space="preserve">
|
||||
<value>שאל אם לשמור פרטי כניסה</value>
|
||||
<value>Ask to add login</value>
|
||||
</data>
|
||||
<data name="AskToAddLoginDescription" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="PasskeyManagement" xml:space="preserve">
|
||||
<value>ניהול Passkey</value>
|
||||
<value>Passkey management</value>
|
||||
</data>
|
||||
<data name="AutofillServices" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name="Text" xml:space="preserve">
|
||||
<value>טקסט</value>
|
||||
<value>Text</value>
|
||||
</data>
|
||||
<data name="TypeText" xml:space="preserve">
|
||||
<value>טקסט</value>
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
<comment>Message shown when interacting with the server</comment>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="Edit" xml:space="preserve">
|
||||
@@ -407,7 +407,7 @@
|
||||
<value>Račun</value>
|
||||
</data>
|
||||
<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 name="AddAnItem" xml:space="preserve">
|
||||
<value>Dodaj stavku</value>
|
||||
@@ -422,7 +422,7 @@
|
||||
<value>Usluga auto-ispune</value>
|
||||
</data>
|
||||
<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 name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||
<value>Izbjegavaj dvosmislene znakove</value>
|
||||
@@ -623,7 +623,7 @@
|
||||
<value>Zadane postavke preuzete iz generatora lozinki glavne aplikacije Bitwarden.</value>
|
||||
</data>
|
||||
<data name="Options" xml:space="preserve">
|
||||
<value>Mogućnosti</value>
|
||||
<value>Opcije</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>Ostalo</value>
|
||||
@@ -1100,7 +1100,7 @@
|
||||
<value>gđica.</value>
|
||||
</data>
|
||||
<data name="Mx" xml:space="preserve">
|
||||
<value>gx.</value>
|
||||
<value>Mx</value>
|
||||
</data>
|
||||
<data name="November" xml:space="preserve">
|
||||
<value>studeni</value>
|
||||
@@ -1194,7 +1194,7 @@
|
||||
<value>Windows Hello</value>
|
||||
</data>
|
||||
<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 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>
|
||||
@@ -1821,7 +1821,7 @@
|
||||
<value>Bitwarden zahtijeva radnju - Bitwarden Postavke -> Usluge auto-ispune -> uključi opciju „Koristi preklapanje”</value>
|
||||
</data>
|
||||
<data name="PasskeyManagement" xml:space="preserve">
|
||||
<value>Upravljanje pristupnim ključevima</value>
|
||||
<value>Passkey management</value>
|
||||
</data>
|
||||
<data name="AutofillServices" xml:space="preserve">
|
||||
<value>Usluge auto-ispune</value>
|
||||
@@ -2175,19 +2175,19 @@
|
||||
<value>Račun uspješno uklonjen</value>
|
||||
</data>
|
||||
<data name="DeleteAccount" xml:space="preserve">
|
||||
<value>Izbriši račun</value>
|
||||
<value>Obriši račun</value>
|
||||
</data>
|
||||
<data name="DeletingYourAccountIsPermanent" xml:space="preserve">
|
||||
<value>Brisanje tvog računa je nepovratno</value>
|
||||
</data>
|
||||
<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 name="DeletingYourAccount" xml:space="preserve">
|
||||
<value>Brisanje tvog računa</value>
|
||||
</data>
|
||||
<data name="YourAccountHasBeenPermanentlyDeleted" xml:space="preserve">
|
||||
<value>Tvoj račun je trajno izbrisan.</value>
|
||||
<value>Tvoj račun je trajno obrisan.</value>
|
||||
</data>
|
||||
<data name="InvalidVerificationCode" xml:space="preserve">
|
||||
<value>Nevažeći kôd za provjeru</value>
|
||||
@@ -2806,7 +2806,7 @@
|
||||
<value>{0} sat/i</value>
|
||||
</data>
|
||||
<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 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>
|
||||
@@ -2831,13 +2831,13 @@
|
||||
<value>Kontaktiraj podršku?</value>
|
||||
</data>
|
||||
<data name="ContinueToPrivacyPolicy" xml:space="preserve">
|
||||
<value>Nastavi na politiku privatnosti?</value>
|
||||
<value>Continue to privacy policy?</value>
|
||||
</data>
|
||||
<data name="ContinueToAppStore" xml:space="preserve">
|
||||
<value>Nastavi u trgovinu aplikacijama?</value>
|
||||
</data>
|
||||
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
||||
<value>Nastavi na postavke uređaja?</value>
|
||||
<value>Continue to device Settings?</value>
|
||||
</data>
|
||||
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<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 name="ExploreMoreFeaturesOfYourBitwardenAccountOnTheWebApp" xml:space="preserve">
|
||||
<value>Pronađi viđe značajki svojeg Bitwarden računa u web aplikaciji.</value>
|
||||
@@ -2890,104 +2890,104 @@
|
||||
<value>Za promjenu vremena isteka trezora, odredi način otključavanja.</value>
|
||||
</data>
|
||||
<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 name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||
<value>Spremi pristupni ključ kao novu prijavu</value>
|
||||
<value>Save passkey as new login</value>
|
||||
</data>
|
||||
<data name="SavePasskey" xml:space="preserve">
|
||||
<value>Spremi pristupni ključ</value>
|
||||
<value>Save passkey</value>
|
||||
</data>
|
||||
<data name="PasskeysForX" xml:space="preserve">
|
||||
<value>Pristupni ključ za {0}</value>
|
||||
<value>Passkeys for {0}</value>
|
||||
</data>
|
||||
<data name="PasswordsForX" xml:space="preserve">
|
||||
<value>Lozinke za {0}</value>
|
||||
<value>Passwords for {0}</value>
|
||||
</data>
|
||||
<data name="OverwritePasskey" xml:space="preserve">
|
||||
<value>Prebriši pristupni ključ?</value>
|
||||
<value>Overwrite passkey?</value>
|
||||
</data>
|
||||
<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 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 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 name="LaunchDuo" xml:space="preserve">
|
||||
<value>Pokreni Duo</value>
|
||||
<value>Launch Duo</value>
|
||||
</data>
|
||||
<data name="VerificationRequiredByX" xml:space="preserve">
|
||||
<value>Potrebna potvrda od {0}</value>
|
||||
<value>Verification required by {0}</value>
|
||||
</data>
|
||||
<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 name="ErrorCreatingPasskey" xml:space="preserve">
|
||||
<value>Greška pri stvaranju pristupnog ključa</value>
|
||||
<value>Error creating passkey</value>
|
||||
</data>
|
||||
<data name="ErrorReadingPasskey" xml:space="preserve">
|
||||
<value>Greška pri čitanju pristupnog ključa</value>
|
||||
<value>Error reading passkey</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||
<value>Potvrda identiteta...</value>
|
||||
<value>Verifying identity...</value>
|
||||
</data>
|
||||
<data name="Passwords" xml:space="preserve">
|
||||
<value>Lozinke</value>
|
||||
<value>Passwords</value>
|
||||
</data>
|
||||
<data name="UnknownAccount" xml:space="preserve">
|
||||
<value>Nepoznati račun</value>
|
||||
<value>Unknown account</value>
|
||||
</data>
|
||||
<data name="SetUpAutofill" xml:space="preserve">
|
||||
<value>Podesi auto-ispunu</value>
|
||||
<value>Set up auto-fill</value>
|
||||
</data>
|
||||
<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 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 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 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 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 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 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="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||
<value>Pristupni ključ nije podržan za ovu aplikaciju</value>
|
||||
<value>Passkeys not supported for this app</value>
|
||||
</data>
|
||||
<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 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 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 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 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>
|
||||
</root>
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
<value>Segnala un bug</value>
|
||||
</data>
|
||||
<data name="FileBugReportDescription" xml:space="preserve">
|
||||
<value>Segnala un problema nel nostro repository su GitHub.</value>
|
||||
<value>Segnala un problema nella nostra repository su GitHub.</value>
|
||||
</data>
|
||||
<data name="FingerprintDirection" xml:space="preserve">
|
||||
<value>Usa la tua impronta digitale per verificare.</value>
|
||||
@@ -285,7 +285,7 @@
|
||||
<value>Account già aggiunto</value>
|
||||
</data>
|
||||
<data name="SwitchToAlreadyAddedAccountConfirmation" xml:space="preserve">
|
||||
<value>Vuoi cambiarlo ora?</value>
|
||||
<value>Vuoi passarci adesso?</value>
|
||||
</data>
|
||||
<data name="MasterPassword" xml:space="preserve">
|
||||
<value>Password principale</value>
|
||||
@@ -375,7 +375,7 @@
|
||||
<comment>Validation message for when a form field is left blank and is required to be entered.</comment>
|
||||
</data>
|
||||
<data name="ValueHasBeenCopied" xml:space="preserve">
|
||||
<value>{0} copiato</value>
|
||||
<value>{0} copiata.</value>
|
||||
<comment>Confirmation message after successfully copying a value to the clipboard.</comment>
|
||||
</data>
|
||||
<data name="VerifyFingerprint" xml:space="preserve">
|
||||
@@ -407,7 +407,7 @@
|
||||
<value>Account</value>
|
||||
</data>
|
||||
<data name="AccountCreated" xml:space="preserve">
|
||||
<value>Il tuo nuovo account è stato creato! Ora puoi effettuare il log in.</value>
|
||||
<value>Il tuo nuovo account è stato creato! Ora puoi fare il login.</value>
|
||||
</data>
|
||||
<data name="AddAnItem" xml:space="preserve">
|
||||
<value>Aggiungi un elemento</value>
|
||||
@@ -416,7 +416,7 @@
|
||||
<value>Estensione app</value>
|
||||
</data>
|
||||
<data name="AutofillAccessibilityDescription" xml:space="preserve">
|
||||
<value>Usa il servizio di accessibilità Bitwarden per riempire automaticamente i tuoi login nelle app e nei siti.</value>
|
||||
<value>Usa il servizio di accessibilità di Bitwarden per il riempimento automatico dei tuoi login su app e web.</value>
|
||||
</data>
|
||||
<data name="AutofillService" xml:space="preserve">
|
||||
<value>Servizio di riempimento automatico</value>
|
||||
@@ -523,7 +523,7 @@
|
||||
<value>Puoi importare in massa i tuoi login dalla cassaforte online di bitwarden.com. Vuoi visitare ora il sito?</value>
|
||||
</data>
|
||||
<data name="ImportItemsDescription" xml:space="preserve">
|
||||
<value>Importa rapidamente in massa i tuoi elementi da altri password manager.</value>
|
||||
<value>Importa rapidamente i tuoi elementi in massa da altri gestori di password.</value>
|
||||
</data>
|
||||
<data name="LastSync" xml:space="preserve">
|
||||
<value>Ultima sincronizzazione:</value>
|
||||
@@ -563,7 +563,7 @@
|
||||
<comment>Message shown when interacting with the server</comment>
|
||||
</data>
|
||||
<data name="LoginOrCreateNewAccount" xml:space="preserve">
|
||||
<value>Entra o crea un nuovo account per accedere alla tua cassaforte.</value>
|
||||
<value>Accedi o crea un nuovo account per aprire la tua cassaforte.</value>
|
||||
</data>
|
||||
<data name="Manage" xml:space="preserve">
|
||||
<value>Gestisci</value>
|
||||
@@ -638,7 +638,7 @@
|
||||
<value>Suggerimento password</value>
|
||||
</data>
|
||||
<data name="PasswordHintAlert" xml:space="preserve">
|
||||
<value>Ti abbiamo inviato un'email con il tuo suggerimento per la password principale.</value>
|
||||
<value>Ti abbiamo inviato un'email con il suggerimento per la password principale.</value>
|
||||
</data>
|
||||
<data name="PasswordOverrideAlert" xml:space="preserve">
|
||||
<value>Sei sicuro di voler sovrascrivere la password corrente?</value>
|
||||
@@ -695,7 +695,7 @@
|
||||
<value>Sincronizzazione fallita</value>
|
||||
</data>
|
||||
<data name="SyncVaultNow" xml:space="preserve">
|
||||
<value>Sincronizza cassaforte</value>
|
||||
<value>Sincronizza cassaforte ora</value>
|
||||
</data>
|
||||
<data name="TouchID" xml:space="preserve">
|
||||
<value>Touch ID</value>
|
||||
@@ -711,7 +711,7 @@
|
||||
<value>Sblocca con codice PIN</value>
|
||||
</data>
|
||||
<data name="Validating" xml:space="preserve">
|
||||
<value>Verifica in corso...</value>
|
||||
<value>Convalida</value>
|
||||
<comment>Message shown when interacting with the server</comment>
|
||||
</data>
|
||||
<data name="VerificationCode" xml:space="preserve">
|
||||
@@ -763,10 +763,10 @@
|
||||
<value>2. Attiva l'interruttore e clicca Consenti per accettare.</value>
|
||||
</data>
|
||||
<data name="Disabled" xml:space="preserve">
|
||||
<value>Disattivato</value>
|
||||
<value>Disabilitato</value>
|
||||
</data>
|
||||
<data name="Enabled" xml:space="preserve">
|
||||
<value>Attivato</value>
|
||||
<value>Attivo</value>
|
||||
</data>
|
||||
<data name="Off" xml:space="preserve">
|
||||
<value>No</value>
|
||||
@@ -817,7 +817,7 @@
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="EnterVerificationCodeEmail" xml:space="preserve">
|
||||
<value>Inserisci il codice di verifica a 6 cifre ricevuto inviato a {0}.</value>
|
||||
<value>Digita il codice di verifica a 6 cifre ricevuto per email su {0}.</value>
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="LoginUnavailable" xml:space="preserve">
|
||||
@@ -836,7 +836,7 @@
|
||||
<comment>Remember my two-step login</comment>
|
||||
</data>
|
||||
<data name="SendVerificationCodeAgain" xml:space="preserve">
|
||||
<value>Invia di nuovo l'email con codice di verifica</value>
|
||||
<value>Invia email con codice di verifica di nuovo</value>
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="TwoStepLoginOptions" xml:space="preserve">
|
||||
@@ -877,7 +877,7 @@
|
||||
<comment>Message shown when downloading a file</comment>
|
||||
</data>
|
||||
<data name="AttachmentLargeWarning" xml:space="preserve">
|
||||
<value>Questo allegato ha una dimensione di {0}. Sei sicuro di volerlo scaricare sul tuo dispositivo?</value>
|
||||
<value>Questo allegato ha dimensione {0}. Sei sicuro di volerlo scaricare sul tuo dispositivo?</value>
|
||||
<comment>The placeholder will show the file size of the attachment. Ex "25 MB"</comment>
|
||||
</data>
|
||||
<data name="AuthenticatorKey" xml:space="preserve">
|
||||
@@ -1049,7 +1049,7 @@
|
||||
<value>Dicembre</value>
|
||||
</data>
|
||||
<data name="Dr" xml:space="preserve">
|
||||
<value>Dr</value>
|
||||
<value>Dott</value>
|
||||
</data>
|
||||
<data name="ExpirationMonth" xml:space="preserve">
|
||||
<value>Mese di scadenza</value>
|
||||
@@ -1154,7 +1154,7 @@
|
||||
<value>Vai alla mia cassaforte</value>
|
||||
</data>
|
||||
<data name="Collections" xml:space="preserve">
|
||||
<value>Collezioni</value>
|
||||
<value>Raccolte</value>
|
||||
</data>
|
||||
<data name="NoItemsCollection" xml:space="preserve">
|
||||
<value>Non ci sono elementi in questa raccolta.</value>
|
||||
@@ -1197,7 +1197,7 @@
|
||||
<value>Non siamo riusciti ad aprire automaticamente il menu delle impostazioni del fornitore di credenziali di Android per te. Puoi raggiungere il menu delle impostazioni del fornitore di credenziali manualmente da Impostazioni Android > Sistema > Password e account > Password, passkey, e servizi dati.</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||
<value>Non siamo riusciti ad aprire le impostazioni del riempimento automatico di Android per te. Puoi navigare manualmente nelle impostazioni di riempimento automatico dalle Impostazioni di Android > Cerca Impostazioni > Cerca "Password" > Seleziona "Compilazione automatica e password".</value>
|
||||
<value>Non siamo riusciti ad aprire le impostazioni del riempimento automatico di Android per te. Puoi navigare manualmente nelle impostazioni di riempimento automatico dalle Impostazioni di Android > Cerca Impostazioni > Cerca "Password e autofill"</value>
|
||||
</data>
|
||||
<data name="CustomFieldName" xml:space="preserve">
|
||||
<value>Nome campo personalizzato</value>
|
||||
@@ -1779,7 +1779,7 @@
|
||||
<value>Una o più politiche dell'organizzazione richiedono che la tua password principale soddisfi questi requisiti:</value>
|
||||
</data>
|
||||
<data name="PolicyInEffectMinComplexity" xml:space="preserve">
|
||||
<value>Punteggio di complessità minimo di {0}</value>
|
||||
<value>Punteggio minimo di complessità {0}</value>
|
||||
</data>
|
||||
<data name="PolicyInEffectMinLength" xml:space="preserve">
|
||||
<value>Lunghezza minima di {0}</value>
|
||||
@@ -2563,7 +2563,7 @@ Vuoi passare a questo account?</value>
|
||||
<value>Importante</value>
|
||||
</data>
|
||||
<data name="YourMasterPasswordCannotBeRecoveredIfYouForgetItXCharactersMinimum" xml:space="preserve">
|
||||
<value>La tua password principale non può essere recuperata se la dimentichi! Minimo {0} caratteri.</value>
|
||||
<value>La tua password principale non può essere recuperata se la dimentichi! {0} caratteri minimi.</value>
|
||||
</data>
|
||||
<data name="WeakMasterPassword" xml:space="preserve">
|
||||
<value>Password principale debole</value>
|
||||
@@ -2593,7 +2593,7 @@ Vuoi passare a questo account?</value>
|
||||
<value>Password principale debole e violata</value>
|
||||
</data>
|
||||
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
|
||||
<value>Password debole e trovata in una violazione dei dati. Usa una password forte e unica per proteggere il tuo account. Sei sicuro di voler usare questa password?</value>
|
||||
<value>Password debole e trovata una violazione dei dati. Usa una password forte e unica per proteggere il tuo account. Sei sicuro di voler usare questa password?</value>
|
||||
</data>
|
||||
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
|
||||
<value>Identificatore SSO dell'organizzazione obbligatorio.</value>
|
||||
|
||||
@@ -2626,7 +2626,7 @@
|
||||
<value>지역</value>
|
||||
</data>
|
||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||
<value>마스터 비밀번호가 조직 정책에 맞지 않습니다. 보관함에 액세스하려면 지금 마스터 비밀번호를 업데이트해야 합니다. 계속하면 현재 세션에서 로그아웃되며 다시 로그인해야 합니다. 다른 장치의 활성 세션은 최대 1시간 동안 계속 활성 상태로 유지될 수 있습니다.</value>
|
||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
||||
</data>
|
||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||
<value>현재 마스터 비밀번호</value>
|
||||
@@ -2759,7 +2759,7 @@
|
||||
<value>Logging in on</value>
|
||||
</data>
|
||||
<data name="Vault" xml:space="preserve">
|
||||
<value>보관함</value>
|
||||
<value>Vault</value>
|
||||
</data>
|
||||
<data name="Appearance" xml:space="preserve">
|
||||
<value>Appearance</value>
|
||||
@@ -2783,13 +2783,13 @@
|
||||
<value>Unlock options</value>
|
||||
</data>
|
||||
<data name="SessionTimeout" xml:space="preserve">
|
||||
<value>세션 만료</value>
|
||||
<value>Session timeout</value>
|
||||
</data>
|
||||
<data name="SessionTimeoutAction" xml:space="preserve">
|
||||
<value>세션 만료 시 동작</value>
|
||||
<value>Session timeout action</value>
|
||||
</data>
|
||||
<data name="AccountFingerprintPhrase" xml:space="preserve">
|
||||
<value>계정 지문 구절</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>
|
||||
</data>
|
||||
<data name="OneHourAndOneMinute" xml:space="preserve">
|
||||
|
||||
@@ -2463,7 +2463,7 @@ jāizvēlas "Pievienot TOTP", lai droši glabātu atslēgu.</value>
|
||||
<value>Izmantot uzstādīto domēna visu tverošo iesūtni.</value>
|
||||
</data>
|
||||
<data name="ForwardedEmailDescription" xml:space="preserve">
|
||||
<value>Izveidot e-pasta aizstājadresi ar ārēju pārvirzīšanas pakalpojumu.</value>
|
||||
<value>Izveidot e-pastu aizstājvārdu ar ārēju pārvirzīšanas pakalpojumu.</value>
|
||||
</data>
|
||||
<data name="Random" xml:space="preserve">
|
||||
<value>Nejauši</value>
|
||||
@@ -2991,6 +2991,6 @@ Vai pārslēgties uz šo kontu?</value>
|
||||
<value>Darbība ar piekļuves atslēgu neizdevāš, jo lietotne netika atrasta līdzekļu saitēs</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
||||
<value>Darbība ar piekļuves atslēgu neizdevās, jo lietotni nevarēja apliecināt</value>
|
||||
<value>Darbība ar piekļuves atslēgu neizdevās, jo lietotni nevarēja apstiprināt</value>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -2978,10 +2978,10 @@ Wilt u naar dit account wisselen?</value>
|
||||
<value>Passkeys zijn niet ondersteund voor deze app</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
||||
<value>Passkey-bewerking mislukt omdat de browser niet gemachtigd is</value>
|
||||
<value>Passkey operation failed because browser is not privileged</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
||||
<value>Passkey-bewerking mislukt omdat de browserhandtekening niet overeenkomt</value>
|
||||
<value>Passkey operation failed because browser signature does not match</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
||||
<value>Passkey-bewerking mislukt omdat de asset links ontbreken</value>
|
||||
@@ -2990,6 +2990,6 @@ Wilt u naar dit account wisselen?</value>
|
||||
<value>Passkey-bewerking mislukt omdat de app niet is gevonden in asset links</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
||||
<value>Passkey-bewerking mislukt omdat de app niet geverifieerd kon worden</value>
|
||||
<value>Passkey operation failed because app could not be verified</value>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -2984,10 +2984,10 @@ Czy chcesz przełączyć się na to konto?</value>
|
||||
<value>Operacja z Passkey nie powiodła się, ponieważ podpis przeglądarki się nie zgadza</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
||||
<value>Operacja klucza dostępu nie powiodła się z powodu brakujących połączeń zasobów</value>
|
||||
<value>Passkey operation failed because of missing asset links</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseAppNotFoundInAssetLinks" xml:space="preserve">
|
||||
<value>Operacja klucza dostępu nie powiodła się, ponieważ aplikacja nie została znaleziona w linkach zasobów</value>
|
||||
<value>Passkey operation failed because app not found in asset links</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
||||
<value>Operacja z Passkey nie powiodła się, ponieważ aplikacja nie mogła zostać zweryfikowana</value>
|
||||
|
||||
@@ -371,7 +371,7 @@
|
||||
<comment>Label for a username.</comment>
|
||||
</data>
|
||||
<data name="ValidationFieldRequired" xml:space="preserve">
|
||||
<value>O campo {0} é obrigatório.</value>
|
||||
<value>O campo {0} é necessário.</value>
|
||||
<comment>Validation message for when a form field is left blank and is required to be entered.</comment>
|
||||
</data>
|
||||
<data name="ValueHasBeenCopied" xml:space="preserve">
|
||||
@@ -1547,7 +1547,7 @@ A leitura será efetuada automaticamente.</value>
|
||||
<comment>Color theme</comment>
|
||||
</data>
|
||||
<data name="ThemeDescription" xml:space="preserve">
|
||||
<value>Altere o tema de cores da aplicação.</value>
|
||||
<value>Alterar o tema de cores da aplicação.</value>
|
||||
</data>
|
||||
<data name="ThemeDefault" xml:space="preserve">
|
||||
<value>Predefinido (Sistema)</value>
|
||||
@@ -2401,13 +2401,13 @@ A leitura será efetuada automaticamente.</value>
|
||||
<value>Palavra aleatória</value>
|
||||
</data>
|
||||
<data name="EmailRequiredParenthesis" xml:space="preserve">
|
||||
<value>E-mail (obrigatório)</value>
|
||||
<value>E-mail (necessário)</value>
|
||||
</data>
|
||||
<data name="DomainNameRequiredParenthesis" xml:space="preserve">
|
||||
<value>Nome do domínio (obrigatório)</value>
|
||||
<value>Nome do domínio (necessário)</value>
|
||||
</data>
|
||||
<data name="APIKeyRequiredParenthesis" xml:space="preserve">
|
||||
<value>Chave da API (obrigatório)</value>
|
||||
<value>Chave da API (necessário)</value>
|
||||
</data>
|
||||
<data name="Service" xml:space="preserve">
|
||||
<value>Serviço</value>
|
||||
@@ -2449,7 +2449,7 @@ A leitura será efetuada automaticamente.</value>
|
||||
<value>Tipo de e-mail</value>
|
||||
</data>
|
||||
<data name="WebsiteRequired" xml:space="preserve">
|
||||
<value>Site (obrigatório)</value>
|
||||
<value>Site (necessário)</value>
|
||||
</data>
|
||||
<data name="UnknownXErrorMessage" xml:space="preserve">
|
||||
<value>Ocorreu um erro desconhecido ({0}).</value>
|
||||
@@ -2604,7 +2604,7 @@ Deseja mudar para esta conta?</value>
|
||||
<value>Não existem itens no seu cofre que correspondam a "{0}"</value>
|
||||
</data>
|
||||
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
|
||||
<value>Procure um item ou adicione um novo</value>
|
||||
<value>Procurar um item ou adicionar um novo</value>
|
||||
</data>
|
||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||
<value>Não existem itens que correspondam à pesquisa</value>
|
||||
@@ -2894,13 +2894,13 @@ Deseja mudar para esta conta?</value>
|
||||
<value>Escolha uma credencial para guardar esta chave de acesso</value>
|
||||
</data>
|
||||
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||
<value>Guarde a chave de acesso como uma nova credencial</value>
|
||||
<value>Guardar a chave de acesso como uma nova credencial</value>
|
||||
</data>
|
||||
<data name="SavePasskey" xml:space="preserve">
|
||||
<value>Guardar a chave de acesso</value>
|
||||
</data>
|
||||
<data name="PasskeysForX" xml:space="preserve">
|
||||
<value>Chaves de acesso para {0}</value>
|
||||
<value>Chave de acesso para {0}</value>
|
||||
</data>
|
||||
<data name="PasswordsForX" xml:space="preserve">
|
||||
<value>Palavra-passe para {0}</value>
|
||||
@@ -2933,7 +2933,7 @@ Deseja mudar para esta conta?</value>
|
||||
<value>Erro ao ler chave de acesso</value>
|
||||
</data>
|
||||
<data name="ThereWasAProblemCreatingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||
<value>Ocorreu um problema ao criar uma chave de acesso para {0}. Tente novamente mais tarde.</value>
|
||||
<value>Houve um problema ao criar uma chave de acesso para {0}. Tente novamente mais tarde.</value>
|
||||
<comment>The parameter is the RpId</comment>
|
||||
</data>
|
||||
<data name="ThereWasAProblemReadingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||
|
||||
@@ -1822,7 +1822,7 @@ Scanarea se va face automat.</value>
|
||||
<value>Bitwarden are nevoie de atenție - Activați "Afișare peste" în "Serviciul de auto-completare" din Setările Bitwarden</value>
|
||||
</data>
|
||||
<data name="PasskeyManagement" xml:space="preserve">
|
||||
<value>Gestionare chei de acces</value>
|
||||
<value>Passkey management</value>
|
||||
</data>
|
||||
<data name="AutofillServices" xml:space="preserve">
|
||||
<value>Servicii de autocompletare</value>
|
||||
@@ -2623,7 +2623,7 @@ Doriți să comutați la acest cont?</value>
|
||||
<value>Data region</value>
|
||||
</data>
|
||||
<data name="Region" xml:space="preserve">
|
||||
<value>Regiune</value>
|
||||
<value>Region</value>
|
||||
</data>
|
||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||
<value>Parola principală nu îndeplinește una sau mai multe politici ale organizației. Pentru a accesa seiful trebuie să actualizați acum parola principală. Continuarea te va deconecta din sesiunea curentă, necesitând să te autentifici din nou. Sesiunile active pe alte dispozitive pot continua să rămână active timp de maxim o oră.</value>
|
||||
@@ -2650,13 +2650,13 @@ Doriți să comutați la acest cont?</value>
|
||||
<value>Remember this device</value>
|
||||
</data>
|
||||
<data name="Passkey" xml:space="preserve">
|
||||
<value>Cheie de acces</value>
|
||||
<value>Passkey</value>
|
||||
</data>
|
||||
<data name="Passkeys" xml:space="preserve">
|
||||
<value>Chei de acces</value>
|
||||
<value>Passkeys</value>
|
||||
</data>
|
||||
<data name="Application" xml:space="preserve">
|
||||
<value>Aplicație</value>
|
||||
<value>Application</value>
|
||||
</data>
|
||||
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
|
||||
<value>You cannot edit passkey application because it would invalidate the passkey</value>
|
||||
@@ -2762,13 +2762,13 @@ Doriți să comutați la acest cont?</value>
|
||||
<value>Vault</value>
|
||||
</data>
|
||||
<data name="Appearance" xml:space="preserve">
|
||||
<value>Aspect</value>
|
||||
<value>Appearance</value>
|
||||
</data>
|
||||
<data name="AccountSecurity" xml:space="preserve">
|
||||
<value>Securitate cont</value>
|
||||
<value>Account security</value>
|
||||
</data>
|
||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||
<value>Centrul de Ajutor Bitwarden</value>
|
||||
<value>Bitwarden help center</value>
|
||||
</data>
|
||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||
<value>Contact Bitwarden support</value>
|
||||
@@ -2777,13 +2777,13 @@ Doriți să comutați la acest cont?</value>
|
||||
<value>Copy app information</value>
|
||||
</data>
|
||||
<data name="SyncNow" xml:space="preserve">
|
||||
<value>Sincronizează acum</value>
|
||||
<value>Sync now</value>
|
||||
</data>
|
||||
<data name="UnlockOptions" xml:space="preserve">
|
||||
<value>Opțiuni de deblocare</value>
|
||||
<value>Unlock options</value>
|
||||
</data>
|
||||
<data name="SessionTimeout" xml:space="preserve">
|
||||
<value>Expirarea sesiunii</value>
|
||||
<value>Session timeout</value>
|
||||
</data>
|
||||
<data name="SessionTimeoutAction" xml:space="preserve">
|
||||
<value>Session timeout action</value>
|
||||
@@ -2817,7 +2817,7 @@ Doriți să comutați la acest cont?</value>
|
||||
<value>Use inline autofill if your selected keyboard supports it. Otherwise, use the default overlay.</value>
|
||||
</data>
|
||||
<data name="AdditionalOptions" xml:space="preserve">
|
||||
<value>Opțiuni adiționale</value>
|
||||
<value>Additional options</value>
|
||||
</data>
|
||||
<data name="ContinueToWebApp" xml:space="preserve">
|
||||
<value>Continue to web app?</value>
|
||||
@@ -2877,7 +2877,7 @@ Doriți să comutați la acest cont?</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>
|
||||
</data>
|
||||
<data name="TooManyAttempts" xml:space="preserve">
|
||||
<value>Prea multe încercări</value>
|
||||
<value>Too many attempts</value>
|
||||
</data>
|
||||
<data name="AccountLoggedOutBiometricExceeded" xml:space="preserve">
|
||||
<value>Account logged out.</value>
|
||||
@@ -2945,13 +2945,13 @@ Doriți să comutați la acest cont?</value>
|
||||
<value>Verifying identity...</value>
|
||||
</data>
|
||||
<data name="Passwords" xml:space="preserve">
|
||||
<value>Parole</value>
|
||||
<value>Passwords</value>
|
||||
</data>
|
||||
<data name="UnknownAccount" xml:space="preserve">
|
||||
<value>Cont necunoscut</value>
|
||||
<value>Unknown account</value>
|
||||
</data>
|
||||
<data name="SetUpAutofill" xml:space="preserve">
|
||||
<value>Configurare completare automată</value>
|
||||
<value>Set up auto-fill</value>
|
||||
</data>
|
||||
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
||||
<value>Get instant access to your passwords and passkeys!</value>
|
||||
|
||||
@@ -342,7 +342,7 @@
|
||||
<comment>Reveal a hidden value (password).</comment>
|
||||
</data>
|
||||
<data name="ItemDeleted" xml:space="preserve">
|
||||
<value>Элемент удален</value>
|
||||
<value>Элемент удален.</value>
|
||||
<comment>Confirmation message after successfully deleting a login.</comment>
|
||||
</data>
|
||||
<data name="Submit" xml:space="preserve">
|
||||
@@ -2632,7 +2632,7 @@
|
||||
<value>Текущий мастер-пароль</value>
|
||||
</data>
|
||||
<data name="LoggedIn" xml:space="preserve">
|
||||
<value>Выполнен вход!</value>
|
||||
<value>Вход выполнен!</value>
|
||||
</data>
|
||||
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
|
||||
<value>Одобрить с другим устройством</value>
|
||||
|
||||
@@ -182,18 +182,18 @@
|
||||
<value>Upraviť priečinok</value>
|
||||
</data>
|
||||
<data name="Email" xml:space="preserve">
|
||||
<value>E-mail</value>
|
||||
<value>Email</value>
|
||||
<comment>Short label for an email address.</comment>
|
||||
</data>
|
||||
<data name="EmailAddress" xml:space="preserve">
|
||||
<value>E-mailová adresa</value>
|
||||
<value>Emailová adresa</value>
|
||||
<comment>Full label for a email address.</comment>
|
||||
</data>
|
||||
<data name="EmailUs" xml:space="preserve">
|
||||
<value>Napíšte nám</value>
|
||||
</data>
|
||||
<data name="EmailUsDescription" xml:space="preserve">
|
||||
<value>Získajte pomoc alebo zanechajte spätnú väzbu zaslaním e-mailu.</value>
|
||||
<value>Získajte pomoc alebo zanechajte spätnú väzbu zaslaním emailu.</value>
|
||||
</data>
|
||||
<data name="EnterPIN" xml:space="preserve">
|
||||
<value>Zadajte PIN kód.</value>
|
||||
@@ -229,7 +229,7 @@
|
||||
<value>Priečinky</value>
|
||||
</data>
|
||||
<data name="FolderUpdated" xml:space="preserve">
|
||||
<value>Priečinok bol uložený</value>
|
||||
<value>Priečinok aktualizovaný.</value>
|
||||
</data>
|
||||
<data name="GoToWebsite" xml:space="preserve">
|
||||
<value>Prejsť na stránku</value>
|
||||
@@ -425,7 +425,7 @@
|
||||
<value>Nastavte Bitwarden ako poskytovateľa prístupových kľúčov v nastaveniach zariadenia.</value>
|
||||
</data>
|
||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||
<value>Vyhnúť sa zameniteľným znakom</value>
|
||||
<value>Vyhnúť sa dvojvýznamovým znakom</value>
|
||||
</data>
|
||||
<data name="BitwardenAppExtension" xml:space="preserve">
|
||||
<value>Bitwarden rozšírenie aplikácie</value>
|
||||
@@ -443,10 +443,10 @@
|
||||
<value>Použite službu zjednodušenia prístupu Bitwardenu pre automatické vypĺňanie prihlasovacích údajov.</value>
|
||||
</data>
|
||||
<data name="ChangeEmail" xml:space="preserve">
|
||||
<value>Zmeniť e-mail</value>
|
||||
<value>Zmeniť email</value>
|
||||
</data>
|
||||
<data name="ChangeEmailConfirmation" xml:space="preserve">
|
||||
<value>Svoju e-mailovú adresu môžete zmeniť na webovom trezore bitwarden.com. Chcete navštíviť túto stránku teraz?</value>
|
||||
<value>Svoju emailovú adresu môžete zmeniť na webovom trezore bitwarden.com. Chcete navštíviť túto stránku teraz?</value>
|
||||
</data>
|
||||
<data name="ChangeMasterPassword" xml:space="preserve">
|
||||
<value>Zmeniť hlavné heslo</value>
|
||||
@@ -471,7 +471,7 @@
|
||||
<value>Zapnúť automatickú synchronizáciu</value>
|
||||
</data>
|
||||
<data name="EnterEmailForHint" xml:space="preserve">
|
||||
<value>Zadajte e-mailovú adresu na zaslanie nápovede k vášmu hlavnému heslu.</value>
|
||||
<value>Zadajte emailovú adresu na zaslanie nápovedy pre vaše hlavné heslo.</value>
|
||||
</data>
|
||||
<data name="ExntesionReenable" xml:space="preserve">
|
||||
<value>Znovu zapnúť rozšírenie aplikácie</value>
|
||||
@@ -483,7 +483,7 @@
|
||||
<value>Zapnúť rozšírenie aplikácie</value>
|
||||
</data>
|
||||
<data name="ExtensionInSafari" xml:space="preserve">
|
||||
<value>V Safari nájdete Bitwarden použitím ikony zdieľania (tip: posúvajte doprava v spodnom riadku ponuky).</value>
|
||||
<value>V Safari nájdete bitwarden použitím ikony zdieľania (tip: posúvajte doprava v spodnom riadku menu).</value>
|
||||
<comment>Safari is the name of apple's web browser</comment>
|
||||
</data>
|
||||
<data name="ExtensionInstantAccess" xml:space="preserve">
|
||||
@@ -496,7 +496,7 @@
|
||||
<value>Vaše prihlasovacie údaje sú teraz ľahko prístupné zo Safari, Chrome a ďalších podporovaných aplikácií.</value>
|
||||
</data>
|
||||
<data name="ExtensionSetup2" xml:space="preserve">
|
||||
<value>V Safari a Chrome nájdete Bitwarden použitím ikony zdieľania (tip: posúvajte doprava v spodnom riadku ponuky).</value>
|
||||
<value>V Safari a Chrome nájdete bitwarden použitím ikony zdieľania (tip: posúvajte doprava v spodnom riadku menu).</value>
|
||||
</data>
|
||||
<data name="ExtensionTapIcon" xml:space="preserve">
|
||||
<value>Klepnite na ikonu bitwarden v menu na spustenie rozšírenia.</value>
|
||||
@@ -514,7 +514,7 @@
|
||||
<value>Generovať heslo</value>
|
||||
</data>
|
||||
<data name="GetPasswordHint" xml:space="preserve">
|
||||
<value>Získať nápoveď k hlavnému heslu</value>
|
||||
<value>Získať nápovedu pre hlavné heslo</value>
|
||||
</data>
|
||||
<data name="ImportItems" xml:space="preserve">
|
||||
<value>Importovať položky</value>
|
||||
@@ -575,10 +575,10 @@
|
||||
<value>Hlavné heslo je heslo, ktoré použijete na prístup k svojmu trezoru. Je veľmi dôležité, aby ste svoje hlavné heslo nezabudli. Neexistuje možnosť, ako heslo obnoviť v prípade, že ho zabudnete.</value>
|
||||
</data>
|
||||
<data name="MasterPasswordHint" xml:space="preserve">
|
||||
<value>Nápoveď pre hlavné heslo (voliteľné)</value>
|
||||
<value>Nápoveda k hlavnému heslo (voliteľné)</value>
|
||||
</data>
|
||||
<data name="MasterPasswordHintDescription" xml:space="preserve">
|
||||
<value>Nápoveď k hlavnému heslu vám môže pomôcť spomenúť si na heslo, ak ho zabudnete.</value>
|
||||
<value>Nápoveda k hlavnému heslu vám môže pomôcť spomenúť si na heslo, ak ho zabudnete.</value>
|
||||
</data>
|
||||
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
|
||||
<value>Hlavné heslo musí obsahovať aspoň {0} znakov.</value>
|
||||
@@ -604,7 +604,7 @@
|
||||
<value>Nová položka vytvorená.</value>
|
||||
</data>
|
||||
<data name="NoFavorites" xml:space="preserve">
|
||||
<value>Vo vašom trezore nie sú žiadne obľúbené položky.</value>
|
||||
<value>Vo vašom trezore nie sú žiadné obľúbené.</value>
|
||||
</data>
|
||||
<data name="NoItems" xml:space="preserve">
|
||||
<value>V trezore sa nenachádzajú žiadne položky.</value>
|
||||
@@ -635,10 +635,10 @@
|
||||
<value>Generátor hesla</value>
|
||||
</data>
|
||||
<data name="PasswordHint" xml:space="preserve">
|
||||
<value>Nápoveď k heslu</value>
|
||||
<value>Nápoveda pre heslo</value>
|
||||
</data>
|
||||
<data name="PasswordHintAlert" xml:space="preserve">
|
||||
<value>Poslali sme vám e-mail s nápoveďou k hlavnému heslu.</value>
|
||||
<value>Poslali sme vám email s nápovedou k hlavnému heslu.</value>
|
||||
</data>
|
||||
<data name="PasswordOverrideAlert" xml:space="preserve">
|
||||
<value>Naozaj chcete prepísať aktuálne heslo?</value>
|
||||
@@ -651,7 +651,7 @@
|
||||
<value>Ohodnotiť aplikáciu</value>
|
||||
</data>
|
||||
<data name="RateTheAppDescription" xml:space="preserve">
|
||||
<value>Prosíme, zvážte napísanie pozitívnej recenzie!</value>
|
||||
<value>Prosíme, zvážte pomôcť nám dobrým hodnotením!</value>
|
||||
</data>
|
||||
<data name="RegeneratePassword" xml:space="preserve">
|
||||
<value>Vygenerovať nové heslo</value>
|
||||
@@ -781,7 +781,7 @@
|
||||
<value>Najjednoduchší spôsob, ako pridať nové prihlasovacie údaje do vášho trezora, je prostredníctvom služby automatického vypĺňania Bitwardenu. Ďalšie informácie o používaní automatického vypĺňania Bitwardenu získate prechodom do obrazovky Nastavení.</value>
|
||||
</data>
|
||||
<data name="Autofill" xml:space="preserve">
|
||||
<value>Automatické vypĺňanie</value>
|
||||
<value>Automatické dopĺňanie</value>
|
||||
</data>
|
||||
<data name="AutofillOrView" xml:space="preserve">
|
||||
<value>Chcete automaticky vyplniť alebo zobraziť toto prihlásenie?</value>
|
||||
@@ -817,7 +817,7 @@
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="EnterVerificationCodeEmail" xml:space="preserve">
|
||||
<value>Zadajte 6-miestny verifikačný kód, ktorý bol zaslaný e-mailom na {0}.</value>
|
||||
<value>Zadajte 6-miestny verifikačný kód, ktorý bol zaslaný emailom na {0}.</value>
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="LoginUnavailable" xml:space="preserve">
|
||||
@@ -836,7 +836,7 @@
|
||||
<comment>Remember my two-step login</comment>
|
||||
</data>
|
||||
<data name="SendVerificationCodeAgain" xml:space="preserve">
|
||||
<value>Znovu zaslať overovací kód e-mailom</value>
|
||||
<value>Znovu zaslať overovací kód emailom</value>
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="TwoStepLoginOptions" xml:space="preserve">
|
||||
@@ -846,11 +846,11 @@
|
||||
<value>Použiť inú dvojstupňovú metódu prihlásenia</value>
|
||||
</data>
|
||||
<data name="VerificationEmailNotSent" xml:space="preserve">
|
||||
<value>Nepodarilo sa odoslať overovací e-mail. Skúste znova.</value>
|
||||
<value>Nepodarilo sa odoslať overovací email. Skúste znova.</value>
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="VerificationEmailSent" xml:space="preserve">
|
||||
<value>Overovací e-mail bol odoslaný.</value>
|
||||
<value>Overovací email bol odoslaný.</value>
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="YubiKeyInstruction" xml:space="preserve">
|
||||
@@ -1198,7 +1198,7 @@ Skenovanie prebehne automaticky.</value>
|
||||
<value>Nepodarilo sa automaticky otvoriť nastavenia poskytovateľa poverení pre Android. Môžete otvoriť nastavenie manuálne cez Nastavenia > Systém > Heslá a účty > Heslá, prístupové kľúče a automatické vypĺňanie.</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||
<value>Nepodarilo sa automaticky otvoriť nastavenia automatického vypĺňania pre systém Android. Môžete otvoriť nastavenie manuálne cez Nastavenia > Systém > Jazyky a vstup > Rozšírené > Služba automatického vypĺňania.</value>
|
||||
<value>Nepodarilo sa automaticky otvoriť nastavenia automatického dopĺňania pre systém Android. Môžete otvoriť nastavenie manuálne cez Nastavenia > Systém > Jazyky a vstup > Rozšírené > Služba automatického dopĺňania.</value>
|
||||
</data>
|
||||
<data name="CustomFieldName" xml:space="preserve">
|
||||
<value>Názov vlastného poľa</value>
|
||||
@@ -1278,7 +1278,7 @@ Skenovanie prebehne automaticky.</value>
|
||||
<value>Ak chcete pokračovať, podržte YubiKey NEO na zadnej strane prístroja.</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
|
||||
<value>Služba dostupnosti môže byť užitočné pre aplikácie, ktoré nepodporujú štandardnú službu automatického vypĺňania.</value>
|
||||
<value>Služba dostupnosti môže byť užitočné pre aplikácie, ktoré nepodporujú štandardnú službu automatického dopĺňania.</value>
|
||||
</data>
|
||||
<data name="DatePasswordUpdated" xml:space="preserve">
|
||||
<value>Heslo bolo aktualizované</value>
|
||||
@@ -1289,7 +1289,7 @@ Skenovanie prebehne automaticky.</value>
|
||||
<comment>ex. Date this item was updated</comment>
|
||||
</data>
|
||||
<data name="AutofillActivated" xml:space="preserve">
|
||||
<value>Automatické vypĺňanie aktivované!</value>
|
||||
<value>Automatické dopĺňanie aktivované!</value>
|
||||
</data>
|
||||
<data name="MustLogInMainAppAutofill" xml:space="preserve">
|
||||
<value>Pred použitím automatického vypĺňania sa najskôr musíte prihlásiť v hlavnej bitwarden aplikácií.</value>
|
||||
@@ -1298,7 +1298,7 @@ Skenovanie prebehne automaticky.</value>
|
||||
<value>Pri prihlasovaní do aplikácií a westránok sú teraz vaše prihlasovacie údaje dostupné priamo z klávesnice.</value>
|
||||
</data>
|
||||
<data name="AutofillSetup2" xml:space="preserve">
|
||||
<value>Odporúčame vám vypnúť ostatné aplikácie pre automatické vypĺňanie, ak ich neplánujete používať.</value>
|
||||
<value>Odporúčame vám vypnúť ostatné aplikácie pre automatické dopĺňanie, ak ich neplánujete používať.</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillDescription" xml:space="preserve">
|
||||
<value>Pri zadávaní hesiel pristupujte v vášmu trezoru priamo z klávesnice.</value>
|
||||
@@ -1316,7 +1316,7 @@ Skenovanie prebehne automaticky.</value>
|
||||
<value>3. Klepnite na možnosť "Automaticky vypĺňať heslá"</value>
|
||||
</data>
|
||||
<data name="AutofillTurnOn4" xml:space="preserve">
|
||||
<value>4. Zapnite automatické vypĺňanie</value>
|
||||
<value>4. Zapnite automatické dopĺňanie</value>
|
||||
</data>
|
||||
<data name="AutofillTurnOn5" xml:space="preserve">
|
||||
<value>5. Vyberte "Bitwarden"</value>
|
||||
@@ -1325,10 +1325,10 @@ Skenovanie prebehne automaticky.</value>
|
||||
<value>Automatické vypĺňanie hesiel</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillAlert2" xml:space="preserve">
|
||||
<value>Najjednoduchší spôsob, ako pridať nové prihlasovacie údaje do trezora, je z Bitwarden rozšírenia pre automatické vypĺňanie. Ďalšie informácie o používaní rozšírenia pre automatické vypĺňanie získate prechodom na obrazovku Nastavení.</value>
|
||||
<value>Najjednoduchší spôsob, ako pridať nové prihlasovacie údaje do trezora, je z Bitwarden rozšírenia pre automatické vypĺňanie. Ďalšie informácie o používaní rozšírenia pre automatické dopĺňanie získate prechodom na obrazovku Nastavení.</value>
|
||||
</data>
|
||||
<data name="InvalidEmail" xml:space="preserve">
|
||||
<value>Neplatná e-mailová adresa.</value>
|
||||
<value>Neplatná emailová adresa.</value>
|
||||
</data>
|
||||
<data name="Cards" xml:space="preserve">
|
||||
<value>Karty</value>
|
||||
@@ -1592,7 +1592,7 @@ Skenovanie prebehne automaticky.</value>
|
||||
<value>Po reštarte aplikácie</value>
|
||||
</data>
|
||||
<data name="AutofillServiceNotEnabled" xml:space="preserve">
|
||||
<value>Automatické vypĺňanie umožňuje jednoducho pristupovať k vášmu trezoru z iných stránok a aplikácií. Zdá sa, že ste službu automatického vypĺňania pomocou Bitwardenu nezapli. Zapnúť ju môžete na obrazovke "Nastavenia".</value>
|
||||
<value>Automatické dopĺňanie umožňuje jednoducho pristupovať k vašemu trezoru z iných stránok a plaikácii. Vyzerá že ste službu automatického dopĺňania pomocou Bitwarden nezapli. Zapnúť ju môžete na obrazove "Nastavenia".</value>
|
||||
</data>
|
||||
<data name="ThemeAppliedOnRestart" xml:space="preserve">
|
||||
<value>Zmena nastavení vzhľadu sa prejaví po opätovnom štarte aplikácie.</value>
|
||||
@@ -1635,7 +1635,7 @@ Skenovanie prebehne automaticky.</value>
|
||||
<value>Povolenie</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillServiceOpenOverlayPermissionSettings" xml:space="preserve">
|
||||
<value>Otvoriť nastavenie zobrazenia v iných aplikáciách</value>
|
||||
<value>Otvoriť nastavenie zoibrazenia v iných aplikáciách</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillServiceStep3" xml:space="preserve">
|
||||
<value>3. V nastaveniach Bitwarden v Android nastaveniach aplikácii vyberte "Zobraziť v iných aplikáciach" (nájdete v rozšírených nastaveniach) a zapnite prepínač aby ste povolili zobrazenie v iných aplikáciach.</value>
|
||||
@@ -1662,7 +1662,7 @@ Skenovanie prebehne automaticky.</value>
|
||||
<value>Ak chcete pokračovať, potvrďte svoju identitu.</value>
|
||||
</data>
|
||||
<data name="ExportVaultWarning" xml:space="preserve">
|
||||
<value>Tento export obsahuje vaše dáta v nešifrovanom formáte. Nemali by ste ich ukladať, ani posielať cez nezabezpečené kanály (napr. e-mail). Okamžite ho odstráňte, keď ho prestanete používať.</value>
|
||||
<value>Tento export obsahuje vaše dáta v nešifrovanom formáte. Nemali by ste ich ukladať, ani posielať cez nezabezpečené kanály (napr. email). Okamžite ho odstráňte, keď ho prestanete používať.</value>
|
||||
</data>
|
||||
<data name="EncExportKeyWarning" xml:space="preserve">
|
||||
<value>Tento export zašifruje vaše údaje pomocou šifrovacieho kľúča vášho účtu. Ak niekedy budete rotovať šifrovací kľúč svojho účtu, mali by ste exportovať znova, pretože nebudete môcť dešifrovať tento exportovaný súbor.</value>
|
||||
@@ -1701,7 +1701,7 @@ Skenovanie prebehne automaticky.</value>
|
||||
<value>Príloha úspešne uložená</value>
|
||||
</data>
|
||||
<data name="AutofillTileAccessibilityRequired" xml:space="preserve">
|
||||
<value>Zapnite službu dostupnosti pre automatické vypĺňanie v nastaveniach Bitwardenu, aby ste mohli používať dlaždicu pre automatické vypĺňanie.</value>
|
||||
<value>Zapnite službu dostupnosti pre automatické vypĺňanie v nastaveniach Bitwardenu aby ste mohli používať dlaždicu pre automatické dopĺňanie.</value>
|
||||
</data>
|
||||
<data name="AutofillTileUriNotFound" xml:space="preserve">
|
||||
<value>Nenájdené žiadne políčka na heslo</value>
|
||||
@@ -1831,7 +1831,7 @@ Skenovanie prebehne automaticky.</value>
|
||||
<value>Použite vnorené automatické vypĺňanie</value>
|
||||
</data>
|
||||
<data name="InlineAutofillDescription" xml:space="preserve">
|
||||
<value>Ak to podporuje váš vybratý editor IME (klávesnica), použite vnorené automatické vypĺňanie. Ak to vaša konfigurácia nepodporuje (alebo je táto voľba zakázaná), bude použité predvolené automatické vyplnenie.</value>
|
||||
<value>Ak to podporuje váš vybratý editor IME (klávesnica), použite vnorené automatické dopĺňanie. Ak to vaša konfigurácia nepodporuje (alebo je táto voľba zakázaná), bude použité predvolené automatické vyplnenie.</value>
|
||||
</data>
|
||||
<data name="Accessibility" xml:space="preserve">
|
||||
<value>Použiť dostupnosť</value>
|
||||
@@ -1846,7 +1846,7 @@ Skenovanie prebehne automaticky.</value>
|
||||
<value>Použite službu zjednodušenia prístupu Bitwardenu pre použitie automatického vypĺňania cez dlaždicu a/alebo zobraziť vyskakovacie okno pomocou zobrazenia cez iné aplikácie (ak je povolené).</value>
|
||||
</data>
|
||||
<data name="AccessibilityDescription4" xml:space="preserve">
|
||||
<value>Vyžaduje sa, aby ste použili dlaždicu rýchlej akcie automatického vypĺňania, alebo aby ste rozšírili službu automatického vypĺňania pomocou funkcie zobrazenia cez iné aplikácie (ak je povolená).</value>
|
||||
<value>Vyžaduje sa, aby ste použili dlaždicu rýchlej akcie automatického dopĺňania, alebo aby ste rozšírili službu automatického dopĺňania pomocou funkcie zobrazenia cez iné aplikácie (ak je povolená).</value>
|
||||
</data>
|
||||
<data name="DrawOver" xml:space="preserve">
|
||||
<value>Použiť zobrazenie cez iné aplikácie</value>
|
||||
@@ -1858,7 +1858,7 @@ Skenovanie prebehne automaticky.</value>
|
||||
<value>Ak je táto možnosť povolená, umožňuje službe zjednodušenia prístupu Bitwardenu zobraziť vyskakovacie okno po klepnutí do prihlasovacieho poľa a pomáha automaticky vyplniť prihlasovacie polia.</value>
|
||||
</data>
|
||||
<data name="DrawOverDescription3" xml:space="preserve">
|
||||
<value>Ak je táto možnosť povolená, dostupnosť zobrazí vyskakovacie okno na rozšírenie služby automatického vypĺňania pre staršie aplikácie, ktoré nepodporujú Android Autofill Framework na zjednodušenie vypĺňania prihlasovacích údajov.</value>
|
||||
<value>Ak je táto možnosť povolená, dostupnosť zobrazí vyskakovacie okno na rozšírenie služby automatického dopĺňania pre staršie aplikácie, ktoré nepodporujú Android Autofill Framework pre zjednodušenie vypĺňania prihlasovacích údajov.</value>
|
||||
</data>
|
||||
<data name="PersonalOwnershipSubmitError" xml:space="preserve">
|
||||
<value>Z dôvodu podnikovej politiky máte obmedzené ukladanie položiek do osobného trezora. Zmeňte možnosť vlastníctvo na organizáciu a vyberte si z dostupných zbierok.</value>
|
||||
@@ -2056,7 +2056,7 @@ Skenovanie prebehne automaticky.</value>
|
||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||
</data>
|
||||
<data name="HideEmail" xml:space="preserve">
|
||||
<value>Skryť moju e-mailovú adresu pred príjemcami</value>
|
||||
<value>Skryť moju emailovú adresu pred príjemcami</value>
|
||||
</data>
|
||||
<data name="SendOptionsPolicyInEffect" xml:space="preserve">
|
||||
<value>Jedno alebo viac pravidiel organizácie ovplyvňujú vaše možnosti funkcie Send.</value>
|
||||
@@ -2434,7 +2434,7 @@ Pridať TOTP, aby ste kľúč bezpečne uložili</value>
|
||||
<comment>"Fastmail" is the product name and should not be translated.</comment>
|
||||
</data>
|
||||
<data name="ForwardEmail" xml:space="preserve">
|
||||
<value>ForwardE-mail</value>
|
||||
<value>ForwardEmail</value>
|
||||
<comment>"ForwardEmail" is the product name and should not be translated.</comment>
|
||||
</data>
|
||||
<data name="APIAccessToken" xml:space="preserve">
|
||||
@@ -2488,13 +2488,13 @@ Pridať TOTP, aby ste kľúč bezpečne uložili</value>
|
||||
<data name="LoginAttemptFromXDoYouWantToSwitchToThisAccount" xml:space="preserve">
|
||||
<value>Pokus o prihlásenie z:
|
||||
{0}
|
||||
Chcete prepnúť na tento účet?</value>
|
||||
Chcete prepnúť na toto konto?</value>
|
||||
</data>
|
||||
<data name="NewAroundHere" xml:space="preserve">
|
||||
<value>Ste tu nový?</value>
|
||||
</data>
|
||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||
<value>Získať nápoveď k hlavnému heslu</value>
|
||||
<value>Získať nápoveď pre hlavné heslo</value>
|
||||
</data>
|
||||
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||
<value>Prihlasujete sa ako {0} na {1}</value>
|
||||
@@ -2842,7 +2842,7 @@ Chcete prepnúť na tento účet?</value>
|
||||
<value>Pokračovať do nastavení zariadenia?</value>
|
||||
</data>
|
||||
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
||||
<value>Zabezpečte svoj účet nastavením dvojstupňového prihlasovania vo webovej aplikácii Bitwarden.</value>
|
||||
<value>Zabezpečte svoje konto nastavením dvojstupňového prihlasovania vo webovej aplikácii Bitwarden.</value>
|
||||
</data>
|
||||
<data name="ChangeMasterPasswordDescriptionLong" xml:space="preserve">
|
||||
<value>Hlavné heslo si môžete zmeniť vo webovej aplikácii Bitwarden.</value>
|
||||
|
||||
@@ -1823,7 +1823,7 @@
|
||||
<value>Bitwarden треба пажњу - Омогућите „Преко“ у „Сервиси Ауто-пуњења“ из подешавања Bitwarden-а</value>
|
||||
</data>
|
||||
<data name="PasskeyManagement" xml:space="preserve">
|
||||
<value>Управљање приступног кључа</value>
|
||||
<value>Управљање приступачног кључа</value>
|
||||
</data>
|
||||
<data name="AutofillServices" xml:space="preserve">
|
||||
<value>Сервиси Ауто-пуњења</value>
|
||||
@@ -2652,22 +2652,22 @@
|
||||
<value>Запамти овај уређај</value>
|
||||
</data>
|
||||
<data name="Passkey" xml:space="preserve">
|
||||
<value>Приступни кључ</value>
|
||||
<value>Приступачни кључ</value>
|
||||
</data>
|
||||
<data name="Passkeys" xml:space="preserve">
|
||||
<value>Приступни кључеви</value>
|
||||
<value>Приступачни кључеви</value>
|
||||
</data>
|
||||
<data name="Application" xml:space="preserve">
|
||||
<value>Апликација</value>
|
||||
</data>
|
||||
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
|
||||
<value>Не може да се уреди апликација кључева јер би то поништило приступни кључ</value>
|
||||
<value>Не може да се уреди апликација кључева јер би то поништило приступачни кључ</value>
|
||||
</data>
|
||||
<data name="PasskeyWillNotBeCopied" xml:space="preserve">
|
||||
<value>Приступни кључ неће бити копиран</value>
|
||||
<value>Приступачни кључ неће бити копиран</value>
|
||||
</data>
|
||||
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
|
||||
<value>Приступни кључ неће бити копиран на клонирану ставку. Да ли желите да наставите са клонирањем ставке?</value>
|
||||
<value>Приступачни кључ неће бити копиран на клонирану ставку. Да ли желите да наставите са клонирањем ставке?</value>
|
||||
</data>
|
||||
<data name="CopyApplication" xml:space="preserve">
|
||||
<value>Копирај апликацију</value>
|
||||
@@ -2930,10 +2930,10 @@
|
||||
<value>За ову радњу је потребна верификација. Подесите метод откључавања у Bitwarden да би наставили.</value>
|
||||
</data>
|
||||
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
||||
<value>Грешка у креацији приступног кључа</value>
|
||||
<value>Грешка у креацији приступачног кључа</value>
|
||||
</data>
|
||||
<data name="ErrorReadingPasskey" xml:space="preserve">
|
||||
<value>Грешка у читању приступног кључа</value>
|
||||
<value>Грешка у читању приступачног кључа</value>
|
||||
</data>
|
||||
<data name="ThereWasAProblemCreatingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||
<value>Дошло је до проблема при креирању приступачког кључа за {0}. Покушајте поново касније.</value>
|
||||
@@ -2956,7 +2956,7 @@
|
||||
<value>Подесити ауто-пуњење</value>
|
||||
</data>
|
||||
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
||||
<value>Имајте инстантни приступ Вашим лозинкама и приступним кључевима!</value>
|
||||
<value>Имајте инстантни приступ Вашим лозинкама и приступачним кључевима!</value>
|
||||
</data>
|
||||
<data name="SetUpAutoFillDescriptionLong" xml:space="preserve">
|
||||
<value>Да бисте подесили ауто-пуњење лозинки и управљање приступним кључевима, подесите Bitwarden као ваш омиљени провајдер у подешавањима iOS-а.</value>
|
||||
@@ -2980,7 +2980,7 @@
|
||||
<value>Приступни кључеви нису подржани за ову апликацију</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
||||
<value>Операција лозинке није успела јер прегледач није привилегован</value>
|
||||
<value>Passkey operation failed because browser is not privileged</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
||||
<value>Операција лозинке није успела јер се потпис прегледача не подудара</value>
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
<value>Mejla oss</value>
|
||||
</data>
|
||||
<data name="EmailUsDescription" xml:space="preserve">
|
||||
<value>Mejla oss direkt för att få hjälp eller lämna feedback.</value>
|
||||
<value>Mejla oss direkt för att få hjälp eller för att lämna återkoppling.</value>
|
||||
</data>
|
||||
<data name="EnterPIN" xml:space="preserve">
|
||||
<value>Ange din PIN-kod.</value>
|
||||
@@ -1824,7 +1824,7 @@ Skanningen sker automatiskt.</value>
|
||||
<value>Bitwarden behöver din uppmärksamhet - Aktivera "Överlappning" under "Tjänster för automatisk ifyllnad" i Bitwardens inställningar</value>
|
||||
</data>
|
||||
<data name="PasskeyManagement" xml:space="preserve">
|
||||
<value>Nyckelhantering</value>
|
||||
<value>Passkey hantering</value>
|
||||
</data>
|
||||
<data name="AutofillServices" xml:space="preserve">
|
||||
<value>Tjänster för automatisk ifyllnad</value>
|
||||
@@ -2008,7 +2008,7 @@ Skanningen sker automatiskt.</value>
|
||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||
</data>
|
||||
<data name="AddSend" xml:space="preserve">
|
||||
<value>Ny Send</value>
|
||||
<value>Skapa ny Send</value>
|
||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||
</data>
|
||||
<data name="AreYouSureDeleteSend" xml:space="preserve">
|
||||
@@ -2085,7 +2085,7 @@ Skanningen sker automatiskt.</value>
|
||||
<value>Captcha krävs</value>
|
||||
</data>
|
||||
<data name="CaptchaFailed" xml:space="preserve">
|
||||
<value>Captcha misslyckades. Försök igen.</value>
|
||||
<value>Captcha misslyckades. Vänligen försök igen.</value>
|
||||
</data>
|
||||
<data name="UpdatedMasterPassword" xml:space="preserve">
|
||||
<value>Huvudlösenord uppdaterades</value>
|
||||
@@ -2773,7 +2773,7 @@ Vill du byta till detta konto?</value>
|
||||
<value>Bitwarden Hjälpcenter</value>
|
||||
</data>
|
||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||
<value>Kontakta Bitwarden-support</value>
|
||||
<value>Kontakta Bitwarden support</value>
|
||||
</data>
|
||||
<data name="CopyAppInformation" xml:space="preserve">
|
||||
<value>Kopiera appinformation</value>
|
||||
@@ -2782,7 +2782,7 @@ Vill du byta till detta konto?</value>
|
||||
<value>Synkronisera nu</value>
|
||||
</data>
|
||||
<data name="UnlockOptions" xml:space="preserve">
|
||||
<value>Upplåsningsalternativ</value>
|
||||
<value>Upplåsning</value>
|
||||
</data>
|
||||
<data name="SessionTimeout" xml:space="preserve">
|
||||
<value>Tidsgräns för session</value>
|
||||
@@ -2810,7 +2810,7 @@ Vill du byta till detta konto?</value>
|
||||
<value>{0} timmar</value>
|
||||
</data>
|
||||
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
||||
<value>Använd Bitwarden för att spara nya lösennycklar och logga in med lösennycklar sparade i ditt valv.</value>
|
||||
<value>Use Bitwarden to save new passkeys and log in with passkeys stored in your vault.</value>
|
||||
</data>
|
||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||
<value>Androids autofyll-ramverk används för att fylla i inloggningsuppgifter i appar på din enhet.</value>
|
||||
@@ -2835,7 +2835,7 @@ Vill du byta till detta konto?</value>
|
||||
<value>Fortsätt att kontakta supporten?</value>
|
||||
</data>
|
||||
<data name="ContinueToPrivacyPolicy" xml:space="preserve">
|
||||
<value>Fortsätt till Integritetspolicy?</value>
|
||||
<value>Fortsätt till integritetspolicy?</value>
|
||||
</data>
|
||||
<data name="ContinueToAppStore" xml:space="preserve">
|
||||
<value>Fortsätt till appbutiken?</value>
|
||||
@@ -2894,13 +2894,13 @@ Vill du byta till detta konto?</value>
|
||||
<value>Ställ in ett upplåsningsalternativ för att ändra vad som händer när tidsgränsen uppnås.</value>
|
||||
</data>
|
||||
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||
<value>Välj en inloggning för att spara denna lösennyckel till</value>
|
||||
<value>Choose a login to save this passkey to</value>
|
||||
</data>
|
||||
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||
<value>Spara nyckel som ny inloggning</value>
|
||||
<value>Spara passkey som ny inloggning</value>
|
||||
</data>
|
||||
<data name="SavePasskey" xml:space="preserve">
|
||||
<value>Spara nyckel</value>
|
||||
<value>Spara lösennyckel</value>
|
||||
</data>
|
||||
<data name="PasskeysForX" xml:space="preserve">
|
||||
<value>Passkeys för {0}</value>
|
||||
@@ -2912,7 +2912,7 @@ Vill du byta till detta konto?</value>
|
||||
<value>Skriv över lösennyckel?</value>
|
||||
</data>
|
||||
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
||||
<value>Detta objekt innehåller redan en lösennyckel. Är du säker på att du vill skriva över nuvarande lösennyckeln?</value>
|
||||
<value>This item already contains a passkey. Are you sure you want to overwrite the current passkey?</value>
|
||||
</data>
|
||||
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
||||
<value>Duo tvåstegsverifiering krävs för ditt konto. </value>
|
||||
@@ -2927,7 +2927,7 @@ Vill du byta till detta konto?</value>
|
||||
<value>Verifiering krävs av {0}</value>
|
||||
</data>
|
||||
<data name="VerificationRequiredForThisActionSetUpAnUnlockMethodInBitwardenToContinue" xml:space="preserve">
|
||||
<value>Verifiering krävs för denna åtgärd. Ställ in en upplåsningsmetod i Bitwarden för att fortsätta.</value>
|
||||
<value>Verification required for this action. Set up an unlock method in Bitwarden to continue.</value>
|
||||
</data>
|
||||
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
||||
<value>Fel vid skapande av lösennyckel</value>
|
||||
@@ -2936,11 +2936,11 @@ Vill du byta till detta konto?</value>
|
||||
<value>Fel vid läsning av lösennyckel</value>
|
||||
</data>
|
||||
<data name="ThereWasAProblemCreatingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||
<value>Det gick inte att skapa en lösennyckel för {0}. Försök igen senare.</value>
|
||||
<value>There was a problem creating a passkey for {0}. Try again later.</value>
|
||||
<comment>The parameter is the RpId</comment>
|
||||
</data>
|
||||
<data name="ThereWasAProblemReadingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||
<value>Det gick inte att läsa lösennyckeln för {0}. Försök igen senare.</value>
|
||||
<value>There was a problem reading your passkey for {0}. Try again later.</value>
|
||||
<comment>The parameter is the RpId</comment>
|
||||
</data>
|
||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||
|
||||
@@ -422,7 +422,7 @@
|
||||
<value>தன்னிரப்பி சேவை</value>
|
||||
</data>
|
||||
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
||||
<value>Bitwarden-ஐ உமது கடவுவிசை வழங்குநராகச் சாதன அமைவுகளில் அமை.</value>
|
||||
<value>Set Bitwarden as your passkey provider in device settings.</value>
|
||||
</data>
|
||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||
<value>தெளிவற்ற எழுத்துக்களைத் தவிர்</value>
|
||||
@@ -1823,7 +1823,7 @@
|
||||
<value>Bitwardenக்கு கவனம் தேவை - Bitwarden அமைப்புகளிலிருந்து "தன்னிரப்பி சேவைகள்"-இல் "மேலே-வரைதல்"-ஐ இயக்குக</value>
|
||||
</data>
|
||||
<data name="PasskeyManagement" xml:space="preserve">
|
||||
<value>கடவுவிசை நிர்வகிப்பு</value>
|
||||
<value>Passkey management</value>
|
||||
</data>
|
||||
<data name="AutofillServices" xml:space="preserve">
|
||||
<value>தன்னிரப்பி சேவைகள்</value>
|
||||
|
||||
@@ -1195,7 +1195,7 @@ Kod otomatik olarak taranacaktır.</value>
|
||||
<value>Windows Hello</value>
|
||||
</data>
|
||||
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
||||
<value>Android bilgi sağlayıcı ayarları menüsünü otomatik olarak açamadık. Bilgi sağlayıcı ayarları menüsüne kendiniz gitmek için Android Ayarları > Sistem > Parolalar ve hesaplar > Parolalar, geçiş anahtarları ve veri servisleri yolunu izleyebilirsiniz.</value>
|
||||
<value>Sizin için Android bilgi sağlayıcı ayarları menüsünü otomatik olarak açamadık. Kendiniz bilgi sağlayıcı ayarları menüsünü Android Ayarları > Sistem > Parolalar & hesaplar > parolalar, anahtarlar ve veri servisleri seçeneğine gidebilirsiniz.</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||
<value>Android otomatik doldurma ayarları menüsünü otomatik olarak açamadık. Lütfen şu yolu izleyerek otomatik doldurma ayarları menüsüne gidin: Android ayarları > Sistem> Dil ve giriş > Gelişmiş > Otomatik doldurma hizmeti.</value>
|
||||
@@ -1453,7 +1453,7 @@ Kod otomatik olarak taranacaktır.</value>
|
||||
<comment>To clear something out. example: To clear browser history.</comment>
|
||||
</data>
|
||||
<data name="Generator" xml:space="preserve">
|
||||
<value>Üreteç</value>
|
||||
<value>Oluşturucu</value>
|
||||
<comment>Short for "Password Generator"</comment>
|
||||
</data>
|
||||
<data name="NoFoldersToList" xml:space="preserve">
|
||||
@@ -1496,10 +1496,10 @@ Kod otomatik olarak taranacaktır.</value>
|
||||
<comment>ex: Logged in as user@example.com on bitwarden.com.</comment>
|
||||
</data>
|
||||
<data name="VaultLockedMasterPassword" xml:space="preserve">
|
||||
<value>Kasanız kilitli. Devam etmek için ana parolanızı doğrulayın.</value>
|
||||
<value>Kasanız kilitlendi. Devam etmek için ana parolanızı doğrulayın.</value>
|
||||
</data>
|
||||
<data name="VaultLockedPIN" xml:space="preserve">
|
||||
<value>Kasanız kilitli. Devam etmek için PIN kodunuzu doğrulayın.</value>
|
||||
<value>Kasanız kilitlendi. Devam etmek için PIN kodunuzu doğrulayın.</value>
|
||||
</data>
|
||||
<data name="VaultLockedIdentity" xml:space="preserve">
|
||||
<value>Kasanız kilitli. Devam etmek için kimliğinizi doğrulayın.</value>
|
||||
@@ -1727,7 +1727,7 @@ Kod otomatik olarak taranacaktır.</value>
|
||||
<comment>Confirmation message after successfully restoring a soft-deleted item</comment>
|
||||
</data>
|
||||
<data name="Trash" xml:space="preserve">
|
||||
<value>Çöp kutusu</value>
|
||||
<value>Çöp Kutusu</value>
|
||||
<comment>(noun) Location of deleted items which have not yet been permanently deleted</comment>
|
||||
</data>
|
||||
<data name="SearchTrash" xml:space="preserve">
|
||||
@@ -1759,10 +1759,10 @@ Kod otomatik olarak taranacaktır.</value>
|
||||
<value>Parmağımla aşağı çektiğimde kasayı eşitle.</value>
|
||||
</data>
|
||||
<data name="LogInSso" xml:space="preserve">
|
||||
<value>Kurumsal çoklu oturum açma</value>
|
||||
<value>Kurumsal tek oturum açma</value>
|
||||
</data>
|
||||
<data name="LogInSsoSummary" xml:space="preserve">
|
||||
<value>Kuruluşunuzun çoklu oturum açma portalını kullanarak hızlıca giriş yapabilirsiniz. Başlamak için lütfen kuruluşunuzun tanımlayıcısını girin.</value>
|
||||
<value>Kuruluşunuzun tek oturum açma portalını kullanarak hızlıca giriş yapabilirsiniz. Başlamak için lütfen kuruluşunuzun tanımlayıcısını girin.</value>
|
||||
</data>
|
||||
<data name="OrgIdentifier" xml:space="preserve">
|
||||
<value>Kuruluş tanımlayıcı</value>
|
||||
@@ -2956,16 +2956,16 @@ Bu hesaba geçmek ister misiniz?</value>
|
||||
<value>Parolalarınıza ve geçiş anahtarlarınıza anında erişin!</value>
|
||||
</data>
|
||||
<data name="SetUpAutoFillDescriptionLong" xml:space="preserve">
|
||||
<value>Otomatik parola doldurma ve anahtar yönetimi için, iOS ayarlarında Bitwarden'ı tercih edilen sağlayıcı olarak belirleyin.</value>
|
||||
<value>Parolaları otomatik doldurmak ve anahtar yönetimi için, iOS ayarlarında Bitwarden'ı tercih edilen sağlayıcı olarak belirleyin.</value>
|
||||
</data>
|
||||
<data name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
||||
<value>1. Cihazınızda Ayarlar > Parolalar > Parola Seçenekleri kısmına gidin</value>
|
||||
<value>1. Cihazınızda Ayarlar > Parolalar > Parola Ayarları seçeneğine gidin</value>
|
||||
</data>
|
||||
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
||||
<value>2. Otomatik doldurmayı açın</value>
|
||||
<value>Oto-Doldurma'yı Etkinleştir</value>
|
||||
</data>
|
||||
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
||||
<value>Parolalar ve geçiş anahtarları için kullanılmak üzere Bitwarden'ı seçin</value>
|
||||
<value>Parolalarınızı ve geçiş anahtarlarını kullanmak için "Bitwarden" seçin</value>
|
||||
</data>
|
||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
||||
<value>Geçiş anahtarınız Bitwarden kasasına kaydedilecektir</value>
|
||||
@@ -2977,10 +2977,10 @@ Bu hesaba geçmek ister misiniz?</value>
|
||||
<value>Bu uygulamada geçiş anahtarları desteklenmiyor</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
||||
<value>Tarayıcı izinli olmadığı için geçiş anahtarı işlemi başarısız oldu</value>
|
||||
<value>Geçiş anahtarı eylemi başarısız oldu çünkü tarayıcı ayrıcalıklı değil</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
||||
<value>Tarayıcı imzası eşleşmediği için geçiş anahtarı işlemi başarısız oldu</value>
|
||||
<value>Geçiş anahtarı eylemi başarısız oldu çünkü tarayıcı imzası uyumsuz</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
||||
<value>Geçiş anahtarı eylemi başarısız oldu çünkü varlık bağlantıları eksik</value>
|
||||
|
||||
@@ -894,7 +894,7 @@
|
||||
<value>Не вдається прочитати ключ автентифікації.</value>
|
||||
</data>
|
||||
<data name="PointYourCameraAtTheQRCode" xml:space="preserve">
|
||||
<value>Наведіть камеру на QR-код.
|
||||
<value>Наведіть свою камеру на QR-код.
|
||||
Сканування відбудеться автоматично.</value>
|
||||
</data>
|
||||
<data name="ScanQrTitle" xml:space="preserve">
|
||||
@@ -978,7 +978,7 @@
|
||||
<value>Середовище власного хостингу</value>
|
||||
</data>
|
||||
<data name="SelfHostedEnvironmentFooter" xml:space="preserve">
|
||||
<value>Вкажіть основну URL-адресу вашого встановлення Bitwarden на власному хостингу.</value>
|
||||
<value>Вкажіть основну URL-адресу вашого локально розміщеного встановлення Bitwarden.</value>
|
||||
</data>
|
||||
<data name="ServerUrl" xml:space="preserve">
|
||||
<value>URL-адреса сервера</value>
|
||||
@@ -1008,7 +1008,7 @@
|
||||
<value>Картка</value>
|
||||
</data>
|
||||
<data name="TypeIdentity" xml:space="preserve">
|
||||
<value>Посвідчення</value>
|
||||
<value>Особисті дані</value>
|
||||
</data>
|
||||
<data name="TypeLogin" xml:space="preserve">
|
||||
<value>Вхід</value>
|
||||
@@ -1343,7 +1343,7 @@
|
||||
<value>Захищені нотатки</value>
|
||||
</data>
|
||||
<data name="AllItems" xml:space="preserve">
|
||||
<value>Усі записи</value>
|
||||
<value>Всі елементи</value>
|
||||
</data>
|
||||
<data name="URIs" xml:space="preserve">
|
||||
<value>URL-адреси</value>
|
||||
@@ -1363,7 +1363,7 @@
|
||||
<value>Цей пароль не було знайдено у жодних відомих витоках даних. Його можна безпечно використовувати.</value>
|
||||
</data>
|
||||
<data name="IdentityName" xml:space="preserve">
|
||||
<value>Назва посвідчення</value>
|
||||
<value>Назва</value>
|
||||
</data>
|
||||
<data name="Value" xml:space="preserve">
|
||||
<value>Значення</value>
|
||||
@@ -1409,7 +1409,7 @@
|
||||
<value>Власник</value>
|
||||
</data>
|
||||
<data name="WhoOwnsThisItem" xml:space="preserve">
|
||||
<value>Хто є власником цього запису?</value>
|
||||
<value>Хто є власником цього елемента?</value>
|
||||
</data>
|
||||
<data name="NoCollectionsToList" xml:space="preserve">
|
||||
<value>Немає збірок.</value>
|
||||
@@ -1468,7 +1468,7 @@
|
||||
<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 name="LearnOrgConfirmation" xml:space="preserve">
|
||||
<value>Bitwarden дозволяє вам надавати доступ до записів свого сховища іншим за допомогою облікового запису організації. Чи не бажаєте перейти на вебсайт bitwarden.com, щоб дізнатися більше?</value>
|
||||
<value>Bitwarden дозволяє вам надавати доступ до елементів свого сховища іншим за допомогою облікового запису організації. Чи не бажаєте перейти на вебсайт bitwarden.com, щоб дізнатися більше?</value>
|
||||
</data>
|
||||
<data name="ExportVault" xml:space="preserve">
|
||||
<value>Експортувати сховище</value>
|
||||
@@ -2257,7 +2257,7 @@
|
||||
<value>Пароль прихований. Торкніться, щоб показати.</value>
|
||||
</data>
|
||||
<data name="FilterByVault" xml:space="preserve">
|
||||
<value>Фільтрувати записи за сховищем</value>
|
||||
<value>Фільтрувати елементи за сховищем</value>
|
||||
</data>
|
||||
<data name="AllVaults" xml:space="preserve">
|
||||
<value>Усі сховища</value>
|
||||
@@ -2474,7 +2474,7 @@
|
||||
<value>Пояснення про службу підтримки доступності</value>
|
||||
</data>
|
||||
<data name="AccessibilityDisclosureText" xml:space="preserve">
|
||||
<value>Bitwarden використовує службу підтримки доступності для пошуку полів входу в програмах і на вебсайтах, після чого встановлює належні ідентифікатори полів для введення імені користувача й пароля під час виявлення збігу в програмі чи на вебсайті. Ми не зберігаємо жодної інформації, що обробляється нашою службою, і не намагаємося контролювати жодних екранних об'єктів, окрім текстового введення облікових даних.</value>
|
||||
<value>Bitwarden використовує службу підтримки доступності для пошуку полів входу в програмах і на вебсайтах, після чого встановлює належні ідентифікатори полів для введення імені користувача й пароля під час виявлення збігу в програмі чи на вебсайті. Ми не зберігаємо жодної інформації, що обробляється нашою службою, і не намагаємося контролювати жодних екранних елементів, окрім текстового введення облікових даних.</value>
|
||||
</data>
|
||||
<data name="Accept" xml:space="preserve">
|
||||
<value>Погодитись</value>
|
||||
@@ -2910,7 +2910,7 @@
|
||||
<value>Перезаписати ключ доступу?</value>
|
||||
</data>
|
||||
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
||||
<value>Цей запис уже містить ключ доступу. Ви впевнені, що хочете перезаписати поточний ключ доступу?</value>
|
||||
<value>Цей елемент вже містить ключ доступу. Ви впевнені, що хочете перезаписати поточний ключ доступу?</value>
|
||||
</data>
|
||||
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
||||
<value>Для вашого облікового запису необхідна двоетапна перевірка з Duo. </value>
|
||||
|
||||
@@ -209,7 +209,7 @@
|
||||
<value>Tạo một vấn đề tại trang GitHub của chúng tôi.</value>
|
||||
</data>
|
||||
<data name="FingerprintDirection" xml:space="preserve">
|
||||
<value>Dùng vân tay của bạn để xác minh.</value>
|
||||
<value>Sử dụng dấu vân tay của bạn để tiếp tục.</value>
|
||||
</data>
|
||||
<data name="Folder" xml:space="preserve">
|
||||
<value>Thư mục</value>
|
||||
@@ -422,7 +422,7 @@
|
||||
<value>Dịch vụ tự động điền</value>
|
||||
</data>
|
||||
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
||||
<value>Đặt Bitwarden làm nhà cung cấp mã khoá của bạn trong cài đặt thiết bị.</value>
|
||||
<value>Đặt Bitwarden làm nhà cung cấp mật mã của bạn trong cài đặt thiết bị.</value>
|
||||
</data>
|
||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||
<value>Tránh các ký tự dễ gây nhầm lẫn</value>
|
||||
@@ -556,7 +556,7 @@
|
||||
<value>Khi hết thời gian mở kho</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
||||
<value>Đăng xuất sẽ xóa tất cả quyền truy cập vào kho của bạn và yêu cầu xác minh trực tuyến sau khi hết thời gian chờ. Bạn có chắc chắn muốn sử dụng cài đặt này không?</value>
|
||||
<value>Tuỳ chọn đăng xuất sẽ đăng xuất khỏi kho sau khi hết thời gian mở kho và bạn sẽ cần đăng nhập lại để tiếp tục sử dụng. Bạn có chắc muốn sử dụng tuỳ chọn này không?</value>
|
||||
</data>
|
||||
<data name="LoggingIn" xml:space="preserve">
|
||||
<value>Đang đăng nhập...</value>
|
||||
@@ -867,17 +867,17 @@
|
||||
<value>Tệp đính kèm</value>
|
||||
</data>
|
||||
<data name="UnableToDownloadFile" xml:space="preserve">
|
||||
<value>Không thể tải về tập tin.</value>
|
||||
<value>Không thể tải về tệp tin.</value>
|
||||
</data>
|
||||
<data name="UnableToOpenFile" xml:space="preserve">
|
||||
<value>Thiết bị của bạn không thể mở loại tập tin này.</value>
|
||||
<value>Thiết bị của bạn không thể mở loại tệp này.</value>
|
||||
</data>
|
||||
<data name="Downloading" xml:space="preserve">
|
||||
<value>Đang tải xuống...</value>
|
||||
<comment>Message shown when downloading a file</comment>
|
||||
</data>
|
||||
<data name="AttachmentLargeWarning" xml:space="preserve">
|
||||
<value>Tệp đính kèm này có kích thước {0}. Bạn có chắc chắn muốn tải nó xuống thiết bị của mình?</value>
|
||||
<value>Tập tin đính kèm này có kích thước {0}. Bạn có chắc chắn muốn tải nó xuống thiết bị của mình?</value>
|
||||
<comment>The placeholder will show the file size of the attachment. Ex "25 MB"</comment>
|
||||
</data>
|
||||
<data name="AuthenticatorKey" xml:space="preserve">
|
||||
@@ -925,7 +925,7 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>Đã xóa tệp đính kèm</value>
|
||||
</data>
|
||||
<data name="ChooseFile" xml:space="preserve">
|
||||
<value>Chọn tập tin</value>
|
||||
<value>Chọn tệp</value>
|
||||
</data>
|
||||
<data name="File" xml:space="preserve">
|
||||
<value>Tập tin</value>
|
||||
@@ -937,13 +937,13 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>Không có tệp đính kèm.</value>
|
||||
</data>
|
||||
<data name="FileSource" xml:space="preserve">
|
||||
<value>Tập tin nguồn</value>
|
||||
<value>Tệp nguồn</value>
|
||||
</data>
|
||||
<data name="FeatureUnavailable" xml:space="preserve">
|
||||
<value>Tính năng không có sẵn</value>
|
||||
</data>
|
||||
<data name="MaxFileSize" xml:space="preserve">
|
||||
<value>Kích thước tối đa của tập tin là 100MB.</value>
|
||||
<value>Kích thước tối đa của tệp tin là 100MB.</value>
|
||||
</data>
|
||||
<data name="UpdateKey" xml:space="preserve">
|
||||
<value>Bạn không thể sử dụng tính năng này cho đến khi bạn cập nhật khoá mã hóa.</value>
|
||||
@@ -1195,7 +1195,7 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>Windows Hello</value>
|
||||
</data>
|
||||
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
||||
<value>Chúng tôi không thể mở cài đặt tự động điền cho bạn. Bạn có thể đi đến cài đặt tự động điền theo cách thủ công bằng cách vào Cài đặt Android > Hệ thống > Mật khẩu & tài khoản > Mật khẩu, mã khoá và dịch vụ dữ liệu.</value>
|
||||
<value>Chúng tôi không thể mở cài đặt tự động điền cho bạn. Bạn có thể đi đến cài đặt tự động điền theo cách thủ công bằng cách vào Cài đặt Android > Hệ thống > Mật khẩu & tài khoản > Mật khẩu, mật mã và dịch vụ dữ liệu.</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||
<value>Chúng tôi không thể mở cài đặt tự động điền cho bạn. Bạn có thể đi đến cài đặt tự động điền theo cách thủ công bằng cách vào Cài đặt > Hệ thống > Ngôn ngữ và nhập liệu > Nâng cao > Dịch vụ tự động điền.</value>
|
||||
@@ -1363,7 +1363,7 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>Mật khẩu này không được tìm thấy trong lần rò rỉ dữ liệu nào trước đây. Nó an toàn để sử dụng.</value>
|
||||
</data>
|
||||
<data name="IdentityName" xml:space="preserve">
|
||||
<value>Tên danh tính</value>
|
||||
<value>Tên danh bạ</value>
|
||||
</data>
|
||||
<data name="Value" xml:space="preserve">
|
||||
<value>Giá trị</value>
|
||||
@@ -1384,7 +1384,7 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>Tìm bộ sưu tập</value>
|
||||
</data>
|
||||
<data name="SearchFileSends" xml:space="preserve">
|
||||
<value>Tìm tập tin trong Gửi</value>
|
||||
<value>Tìm tệp tin trong Gửi</value>
|
||||
</data>
|
||||
<data name="SearchTextSends" xml:space="preserve">
|
||||
<value>Tìm văn bản trong Gửi</value>
|
||||
@@ -1453,18 +1453,18 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<comment>To clear something out. example: To clear browser history.</comment>
|
||||
</data>
|
||||
<data name="Generator" xml:space="preserve">
|
||||
<value>Trình tạo</value>
|
||||
<value>Tạo</value>
|
||||
<comment>Short for "Password Generator"</comment>
|
||||
</data>
|
||||
<data name="NoFoldersToList" xml:space="preserve">
|
||||
<value>Không có thư mục nào.</value>
|
||||
</data>
|
||||
<data name="FingerprintPhrase" xml:space="preserve">
|
||||
<value>Cụm vân tay</value>
|
||||
<value>Cụm từ mật khẩu</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>
|
||||
</data>
|
||||
<data name="YourAccountsFingerprint" xml:space="preserve">
|
||||
<value>Cụm vân tay của tài khoản của bạn</value>
|
||||
<value>Cụm từ mật khẩu của tài khoản của bạn</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>
|
||||
</data>
|
||||
<data name="LearnOrgConfirmation" xml:space="preserve">
|
||||
@@ -1502,7 +1502,7 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>Đã khóa kho của bạn. Nhập mã PIN để mở.</value>
|
||||
</data>
|
||||
<data name="VaultLockedIdentity" xml:space="preserve">
|
||||
<value>Kho của bạn đã bị khóa. Xác minh danh tính của bạn để mở khoá.</value>
|
||||
<value>Đã khóa kho của bạn. Hãy xác minh danh tính để tiếp tục.</value>
|
||||
</data>
|
||||
<data name="Dark" xml:space="preserve">
|
||||
<value>Tối</value>
|
||||
@@ -1528,11 +1528,11 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>2 phút</value>
|
||||
</data>
|
||||
<data name="ClearClipboard" xml:space="preserve">
|
||||
<value>Xóa khay nhớ tạm</value>
|
||||
<value>Xóa bộ nhớ tạm</value>
|
||||
<comment>Clipboard is the operating system thing where you copy/paste data to on your device.</comment>
|
||||
</data>
|
||||
<data name="ClearClipboardDescription" xml:space="preserve">
|
||||
<value>Tự động xóa mọi thứ đã sao chép khỏi khay nhớ tạm.</value>
|
||||
<value>Tự động xóa mọi thứ đã sao chép khỏi bộ nhớ tạm.</value>
|
||||
<comment>Clipboard is the operating system thing where you copy/paste data to on your device.</comment>
|
||||
</data>
|
||||
<data name="DefaultUriMatchDetection" xml:space="preserve">
|
||||
@@ -1611,7 +1611,7 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>Đã chia sẻ</value>
|
||||
</data>
|
||||
<data name="ToggleVisibility" xml:space="preserve">
|
||||
<value>Bật/tắt khả năng hiển thị</value>
|
||||
<value>Đổi chế độ hiển thị</value>
|
||||
</data>
|
||||
<data name="LoginExpired" xml:space="preserve">
|
||||
<value>Phiên đăng nhập của bạn đã hết hạn.</value>
|
||||
@@ -1647,7 +1647,7 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>Đã cấp</value>
|
||||
</data>
|
||||
<data name="FileFormat" xml:space="preserve">
|
||||
<value>Định dạng tập tin</value>
|
||||
<value>Định dạng tệp tin</value>
|
||||
</data>
|
||||
<data name="ExportVaultMasterPasswordDescription" xml:space="preserve">
|
||||
<value>Nhập mật khẩu chính để xuất kho của bạn.</value>
|
||||
@@ -1662,7 +1662,7 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>Xác minh danh tính để tiếp tục.</value>
|
||||
</data>
|
||||
<data name="ExportVaultWarning" xml:space="preserve">
|
||||
<value>Tập tin xuất này chứa dữ liệu kho của bạn dưới một định dạng không được mã hóa. Bạn không nên lưu trữ hay gửi tập tin này thông qua phương thức không an toàn (như email). Xóa nó ngay lập tức khi bạn đã dùng xong.</value>
|
||||
<value>Tệp trích xuất này chứa dữ liệu kho của bạn dưới một định dạng không được mã hóa. Bạn không nên lưu trữ hay gửi tệp này thông qua phương thức không an toàn (như email). Xóa nó ngay lập tức khi bạn đã dùng xong.</value>
|
||||
</data>
|
||||
<data name="EncExportKeyWarning" xml:space="preserve">
|
||||
<value>Quá trình xuất này mã hóa dữ liệu của bạn bằng khóa mã hóa của tài khoản. Nếu bạn đã từng thay đổi khóa mã hóa của tài khoản, bạn cần xuất lại vì bạn sẽ không thể giải mã tệp xuất này.</value>
|
||||
@@ -1688,7 +1688,7 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<comment>Clone an entity (verb).</comment>
|
||||
</data>
|
||||
<data name="PasswordGeneratorPolicyInEffect" xml:space="preserve">
|
||||
<value>Các chính sách của tổ chức đang ảnh hưởng đến cài đặt tạo mật khẩu của bạn</value>
|
||||
<value>Có một hoặc vài chính sách của tổ chức đang ảnh hưởng đến cài đặt tạo mật khẩu của bạn</value>
|
||||
</data>
|
||||
<data name="Open" xml:space="preserve">
|
||||
<value>Mở</value>
|
||||
@@ -1777,7 +1777,7 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>Để hoàn tất truy cập bằng phương thức SSO, vui lòng tạo mật khẩu chính để truy cập và bảo vệ kho.</value>
|
||||
</data>
|
||||
<data name="MasterPasswordPolicyInEffect" xml:space="preserve">
|
||||
<value>Các chính sách của tổ chức yêu cầu mật khẩu chính của bạn phải:</value>
|
||||
<value>Một hay nhiều chính sách của tổ chức yêu cầu mật khẩu chính của bạn phải:</value>
|
||||
</data>
|
||||
<data name="PolicyInEffectMinComplexity" xml:space="preserve">
|
||||
<value>Độ mạnh tối thiểu {0}</value>
|
||||
@@ -1823,7 +1823,7 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>Chú ý Bitwarden - Bật (Hiện trên ứng dụng) trong phần cài đặt "Điền tự động" của Bitwarden</value>
|
||||
</data>
|
||||
<data name="PasskeyManagement" xml:space="preserve">
|
||||
<value>Quản lý mã khoá</value>
|
||||
<value>Quản lý mật mã</value>
|
||||
</data>
|
||||
<data name="AutofillServices" xml:space="preserve">
|
||||
<value>Tự động điền mật khẩu</value>
|
||||
@@ -1862,7 +1862,7 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>Nếu được bật, Bitwarden sẽ hiển thị popup để tăng cường Điền tự động cho các ứng dụng cũ hơn không hỗ trợ Android Autofill Framework.</value>
|
||||
</data>
|
||||
<data name="PersonalOwnershipSubmitError" xml:space="preserve">
|
||||
<value>Do chính sách doanh nghiệp, bạn bị hạn chế lưu các mục vào kho cá nhân của mình. Thay đổi tùy chọn quyền sở hữu thành một tổ chức và chọn từ các bộ sưu tập có sẵn.</value>
|
||||
<value>Do chính sách của tổ chức, bạn không được lưu trữ mục trong kho mật khẩu cá nhân.</value>
|
||||
</data>
|
||||
<data name="PersonalOwnershipPolicyInEffect" xml:space="preserve">
|
||||
<value>Chính sách của tổ chức đang ảnh hưởng đến các tùy chọn quyền sở hữu của bạn.</value>
|
||||
@@ -1903,10 +1903,10 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<value>Tập tin bạn muốn gửi.</value>
|
||||
</data>
|
||||
<data name="FileTypeIsSelected" xml:space="preserve">
|
||||
<value>Loại tập tin được chọn.</value>
|
||||
<value>Loại tệp được chọn.</value>
|
||||
</data>
|
||||
<data name="FileTypeIsNotSelected" xml:space="preserve">
|
||||
<value>Loại tập tin chưa được chọn, nhấn để chọn.</value>
|
||||
<value>Loại tệp chưa được chọn, nhấn để chọn.</value>
|
||||
</data>
|
||||
<data name="TextTypeIsSelected" xml:space="preserve">
|
||||
<value>Loại văn bản được chọn.</value>
|
||||
@@ -2057,7 +2057,7 @@ Quá trình quét sẽ diễn ra tự động.</value>
|
||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||
</data>
|
||||
<data name="HideEmail" xml:space="preserve">
|
||||
<value>Ẩn địa chỉ email của tôi khỏi người nhận</value>
|
||||
<value>Ẩn địa chỉ email của tôi</value>
|
||||
</data>
|
||||
<data name="SendOptionsPolicyInEffect" xml:space="preserve">
|
||||
<value>Các chính sách của tổ chức đang ảnh hưởng đến tùy chọn Gửi của bạn.</value>
|
||||
@@ -2394,7 +2394,7 @@ chọn Thêm TOTP để lưu khóa an toàn</value>
|
||||
<value>Địa chỉ email có hậu tố</value>
|
||||
</data>
|
||||
<data name="CatchAllEmail" xml:space="preserve">
|
||||
<value>Catch-all email</value>
|
||||
<value>Email tổng hợp</value>
|
||||
</data>
|
||||
<data name="ForwardedEmailAlias" xml:space="preserve">
|
||||
<value>Đã chuyển tiếp bí danh email</value>
|
||||
@@ -2460,7 +2460,7 @@ chọn Thêm TOTP để lưu khóa an toàn</value>
|
||||
<value>Sử dụng khả năng địa chỉ phụ của nhà cung cấp dịch vụ mail của bạn</value>
|
||||
</data>
|
||||
<data name="CatchAllEmailDescription" xml:space="preserve">
|
||||
<value>Sử dụng hộp thư bạn đã thiết lập để nhận tất cả email gửi đến tên miền của bạn.</value>
|
||||
<value>Sử dụng hộp thư đến tổng hợp được định cấu hình trong tên miền của bạn.</value>
|
||||
</data>
|
||||
<data name="ForwardedEmailDescription" xml:space="preserve">
|
||||
<value>Tạo bí danh email với dịch vụ chuyển tiếp bên ngoài.</value>
|
||||
@@ -2516,7 +2516,7 @@ Bạn có muốn chuyển sang tài khoản này không?</value>
|
||||
<value>Một thông báo đã được gửi đến thiết bị của bạn.</value>
|
||||
</data>
|
||||
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
|
||||
<value>Vui lòng đảm bảo rằng bạn đã mở khoá kho và cụm vân tay khớp trên thiết bị khác.</value>
|
||||
<value>Vui lòng đảm bảo rằng bạn đã mở khoá kho và cụm từ mật khẩu khớp trên thiết bị khác.</value>
|
||||
</data>
|
||||
<data name="ResendNotification" xml:space="preserve">
|
||||
<value>Gửi lại thông báo</value>
|
||||
@@ -2585,16 +2585,16 @@ Bạn có muốn chuyển sang tài khoản này không?</value>
|
||||
<value>Kiểm tra mật khẩu có lộ trong các vụ rò rỉ dữ liệu hay không</value>
|
||||
</data>
|
||||
<data name="ExposedMasterPassword" xml:space="preserve">
|
||||
<value>Mật khẩu chính bị lộ</value>
|
||||
<value>Mật khẩu chính Bị Lộ</value>
|
||||
</data>
|
||||
<data name="PasswordFoundInADataBreachAlertDescription" xml:space="preserve">
|
||||
<value>Mật khẩu này đã bị rò rỉ trong một vụ tấn công dữ liệu. Dùng mật khẩu duy nhất để bảo vệ tài khoản bạn. Bạn có chắc muốn sử dụng mật khẩu đã bị rò rỉ?</value>
|
||||
<value>Mật khẩu này đã bị rò rỉ trong một vụ tấn công dữ liệu. Bạn có chắc muốn sử dụng mật khẩu đã bị rò rỉ?</value>
|
||||
</data>
|
||||
<data name="WeakAndExposedMasterPassword" xml:space="preserve">
|
||||
<value>Mật khẩu chính yếu và bị lộ</value>
|
||||
<value>Mật khẩu chính Yếu và Bị Lộ</value>
|
||||
</data>
|
||||
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
|
||||
<value>Mật khẩu yếu này đã bị rò rỉ trong một vụ tấn công dữ liệu. Dùng mật khẩu mới và an toàn để bảo vệ tài khoản bạn. Bạn có chắc muốn sử dụng mật khẩu đã bị rò rỉ?</value>
|
||||
<value>Mật khẩu này yếu và đã bị rò rỉ trong một vụ tấn công dữ liệu. Bạn có chắc muốn sử dụng mật khẩu này?</value>
|
||||
</data>
|
||||
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
|
||||
<value>Cần có mã định danh SSO của tổ chức.</value>
|
||||
@@ -2651,22 +2651,22 @@ Bạn có muốn chuyển sang tài khoản này không?</value>
|
||||
<value>Lưu thiết bị này</value>
|
||||
</data>
|
||||
<data name="Passkey" xml:space="preserve">
|
||||
<value>Mã khoá</value>
|
||||
<value>Passkey</value>
|
||||
</data>
|
||||
<data name="Passkeys" xml:space="preserve">
|
||||
<value>Các mã khoá</value>
|
||||
<value>Passkey</value>
|
||||
</data>
|
||||
<data name="Application" xml:space="preserve">
|
||||
<value>Ứng dụng</value>
|
||||
</data>
|
||||
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
|
||||
<value>Bạn không thể chỉnh sửa ứng dụng mã khoá vì điều đó sẽ làm mất hiệu lực mã khoá</value>
|
||||
<value>Bạn không thể chỉnh sửa ứng dụngpasskey vì nó sẽ làm mất hiệu lực passkey</value>
|
||||
</data>
|
||||
<data name="PasskeyWillNotBeCopied" xml:space="preserve">
|
||||
<value>Không thể sao chép mã khoá</value>
|
||||
<value>Không thể sao chép passkey</value>
|
||||
</data>
|
||||
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
|
||||
<value>Bản sao sẽ không bao gồm mã khoá. Bạn có muốn tiếp tục tạo bản sao mục này?</value>
|
||||
<value>Passkey sẽ không được sao chép vào mục sao chép. Bạn có muốn tiếp tục sao chép mục này?</value>
|
||||
</data>
|
||||
<data name="CopyApplication" xml:space="preserve">
|
||||
<value>Sao chép ứng dụng</value>
|
||||
@@ -2772,7 +2772,7 @@ Bạn có muốn chuyển sang tài khoản này không?</value>
|
||||
<value>Trung tâm hỗ trợ Bitwarden</value>
|
||||
</data>
|
||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||
<value>Liên hệ với bộ phận hỗ trợ Bitwarden</value>
|
||||
<value>Liên hệ Bitwarden</value>
|
||||
</data>
|
||||
<data name="CopyAppInformation" xml:space="preserve">
|
||||
<value>Sao chép thông tin ứng dụng</value>
|
||||
@@ -2809,7 +2809,7 @@ Bạn có muốn chuyển sang tài khoản này không?</value>
|
||||
<value>{0} giờ</value>
|
||||
</data>
|
||||
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
||||
<value>Sử dụng Bitwarden để lưu các mã khoá mới và đăng nhập bằng các mã khoá được lưu trong kho của bạn.</value>
|
||||
<value>Sử dụng Bitwarden để lưu mật mã mới và đăng nhập bằng mật mã được lưu trong kho của bạn.</value>
|
||||
</data>
|
||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||
<value>Dùng Android Autofill Framework để điền thông tin đăng nhập vào các ứng dụng khác trên thiết bị của bạn.</value>
|
||||
@@ -2821,14 +2821,14 @@ Bạn có muốn chuyển sang tài khoản này không?</value>
|
||||
<value>Tùy chọn bổ sung</value>
|
||||
</data>
|
||||
<data name="ContinueToWebApp" xml:space="preserve">
|
||||
<value>Tiếp tục tới ứng dụng web?</value>
|
||||
<value>Xem trong web?</value>
|
||||
</data>
|
||||
<data name="ContinueToX" xml:space="preserve">
|
||||
<value>Đi đến {0}?</value>
|
||||
<comment>The parameter is an URL, like bitwarden.com.</comment>
|
||||
</data>
|
||||
<data name="ContinueToHelpCenter" xml:space="preserve">
|
||||
<value>Tiếp tục tới Trung tâm trợ giúp?</value>
|
||||
<value>Đi đến Trung tâm trợ giúp?</value>
|
||||
</data>
|
||||
<data name="ContinueToContactSupport" xml:space="preserve">
|
||||
<value>Vẫn liên hệ hỗ trợ?</value>
|
||||
@@ -2837,7 +2837,7 @@ Bạn có muốn chuyển sang tài khoản này không?</value>
|
||||
<value>Đồng ý với chính sách bảo mật?</value>
|
||||
</data>
|
||||
<data name="ContinueToAppStore" xml:space="preserve">
|
||||
<value>Tiếp tục tới cửa hàng ứng dụng?</value>
|
||||
<value>Vẫn tiếp tục đến cửa hàng ứng dụng?</value>
|
||||
</data>
|
||||
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
||||
<value>Tiếp tục tới Cài đặt thiết bị?</value>
|
||||
@@ -2893,34 +2893,34 @@ Bạn có muốn chuyển sang tài khoản này không?</value>
|
||||
<value>Thiết lập khóa khi hết thời gian chờ kho.</value>
|
||||
</data>
|
||||
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||
<value>Chọn thông tin đăng nhập để lưu mã khoá này vào</value>
|
||||
<value>Chọn thông tin đăng nhập để lưu mật mã này vào</value>
|
||||
</data>
|
||||
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||
<value>Lưu mã khoá như đăng nhập mới</value>
|
||||
<value>Lưu mật mã như đăng nhập mới</value>
|
||||
</data>
|
||||
<data name="SavePasskey" xml:space="preserve">
|
||||
<value>Lưu mã khoá</value>
|
||||
<value>Lưu mật mã</value>
|
||||
</data>
|
||||
<data name="PasskeysForX" xml:space="preserve">
|
||||
<value>Các mã khoá cho {0}</value>
|
||||
<value>Mật mã {0}</value>
|
||||
</data>
|
||||
<data name="PasswordsForX" xml:space="preserve">
|
||||
<value>Mật khẩu {0}</value>
|
||||
</data>
|
||||
<data name="OverwritePasskey" xml:space="preserve">
|
||||
<value>Ghi đè mã khoá?</value>
|
||||
<value>Ghi đè mật mã?</value>
|
||||
</data>
|
||||
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
||||
<value>Mục này đã chứa mã khoá. Bạn có chắc muốn ghi đè mã khoá hiện tại không?</value>
|
||||
<value>Mục này đã chứa mật mã. Bạn có chắc muốn ghi đè mật mã hiện tại không?</value>
|
||||
</data>
|
||||
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
||||
<value>Tài khoản của bạn yêu cầu đăng nhập hai bước với Duo.</value>
|
||||
<value>Tài khoản của bạn bắt buộc đăng nhập 2 bước Dou. </value>
|
||||
</data>
|
||||
<data name="FollowTheStepsFromDuoToFinishLoggingIn" xml:space="preserve">
|
||||
<value>Làm theo các bước từ Dou để hoàn tất đăng nhập.</value>
|
||||
</data>
|
||||
<data name="LaunchDuo" xml:space="preserve">
|
||||
<value>Khởi chạy Dou</value>
|
||||
<value>Khởi động Dou</value>
|
||||
</data>
|
||||
<data name="VerificationRequiredByX" xml:space="preserve">
|
||||
<value>Yêu cầu xác minh bởi {0}</value>
|
||||
@@ -2929,17 +2929,17 @@ Bạn có muốn chuyển sang tài khoản này không?</value>
|
||||
<value>Cần phải xác minh cho hành động này. Thiết lập phương thức mở khóa trong Bitwarden để tiếp tục.</value>
|
||||
</data>
|
||||
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
||||
<value>Lỗi tạo mã khoá</value>
|
||||
<value>Lỗi tạo mật mã</value>
|
||||
</data>
|
||||
<data name="ErrorReadingPasskey" xml:space="preserve">
|
||||
<value>Lỗi đọc mã khoá</value>
|
||||
<value>Lỗi đọc mật mã</value>
|
||||
</data>
|
||||
<data name="ThereWasAProblemCreatingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||
<value>Xảy ra lỗi khi tạo mã khoá cho {0}. Thử lại sau.</value>
|
||||
<value>Xảy ra lỗi khi tạo mật mã cho {0}. Thử lại sau.</value>
|
||||
<comment>The parameter is the RpId</comment>
|
||||
</data>
|
||||
<data name="ThereWasAProblemReadingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||
<value>Xảy ra lỗi khi đọc mã khoá cho {0}. Thử lại sau.</value>
|
||||
<value>Xảy ra lỗi khi đọc mật mã cho {0}. Thử lại sau.</value>
|
||||
<comment>The parameter is the RpId</comment>
|
||||
</data>
|
||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||
@@ -2955,28 +2955,28 @@ Bạn có muốn chuyển sang tài khoản này không?</value>
|
||||
<value>Thiết lập điền tự động</value>
|
||||
</data>
|
||||
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
||||
<value>Truy cập ngay vào mật khẩu và mã khoá của bạn!</value>
|
||||
<value>Truy cập ngay vào mật khẩu và mật mã của bạn!</value>
|
||||
</data>
|
||||
<data name="SetUpAutoFillDescriptionLong" xml:space="preserve">
|
||||
<value>Để thiết lập điền tự động mật khẩu và quản lý mã khoá, hãy đặt Bitwarden làm nhà cung cấp ưa thích của bạn trong Cài đặt iOS.</value>
|
||||
<value>Để thiết lập điền tự động mật khẩu và quản lý mật mã, hãy đặt Bitwarden làm nhà cung cấp ưa thích của bạn trong Cài đặt iOS.</value>
|
||||
</data>
|
||||
<data name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
||||
<value>1. Vào Cài đặt Thiết bị > Mật khẩu > Tùy chọn mật khẩu</value>
|
||||
</data>
|
||||
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
||||
<value>2. Bật Tự động điền mật khẩu</value>
|
||||
<value>4. Bật Tự động điền mật khẩu</value>
|
||||
</data>
|
||||
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
||||
<value>3. Chọn "Bitwarden" để dùng cho mật khẩu và mã khoá</value>
|
||||
<value>3. Chọn "Bitwarden" để dùng cho mật khẩu và mật mã</value>
|
||||
</data>
|
||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
||||
<value>Mã khoá sẽ được lưu vào kho Bitwarden của bạn</value>
|
||||
<value>Mật mã sẽ được lưu vào kho Bitwarden của bạn</value>
|
||||
</data>
|
||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||
<value>Mã khoá sẽ được lưu vào kho Bitwarden của bạn cho {0}</value>
|
||||
<value>Mật mã sẽ được lưu vào kho Bitwarden của bạn cho {0}</value>
|
||||
</data>
|
||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||
<value>Ứng dụng này không hỗ trợ mã khoá</value>
|
||||
<value>Ứng dụng này không hỗ trợ mật mã</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
||||
<value>Thao tác mã khóa không thành công vì trình duyệt không có quyền</value>
|
||||
|
||||
@@ -422,7 +422,7 @@
|
||||
<value>自动填充服务</value>
|
||||
</data>
|
||||
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
||||
<value>在设备的「设置」中将 Bitwarden 设置为您的通行密钥提供程序。</value>
|
||||
<value>在设备的设置中将 Bitwarden 设置为您的通行密钥提供程序。</value>
|
||||
</data>
|
||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||
<value>避免易混淆的字符</value>
|
||||
@@ -474,13 +474,13 @@
|
||||
<value>请输入您账户的电子邮件地址来接收主密码提示。</value>
|
||||
</data>
|
||||
<data name="ExntesionReenable" xml:space="preserve">
|
||||
<value>重新激活 App 扩展</value>
|
||||
<value>重新启用应用程序扩展</value>
|
||||
</data>
|
||||
<data name="ExtensionAlmostDone" xml:space="preserve">
|
||||
<value>就差一步!</value>
|
||||
</data>
|
||||
<data name="ExtensionEnable" xml:space="preserve">
|
||||
<value>激活 App 扩展</value>
|
||||
<value>启用应用程序扩展</value>
|
||||
</data>
|
||||
<data name="ExtensionInSafari" xml:space="preserve">
|
||||
<value>在 Safari 中,使用共享图标寻找 Bitwarden (提示:在菜单最下面一行的右边)。</value>
|
||||
@@ -563,7 +563,7 @@
|
||||
<comment>Message shown when interacting with the server</comment>
|
||||
</data>
|
||||
<data name="LoginOrCreateNewAccount" xml:space="preserve">
|
||||
<value>登录或创建一个新账户以访问您的安全密码库。</value>
|
||||
<value>登录或者新建一个账户来访问您的安全密码库。</value>
|
||||
</data>
|
||||
<data name="Manage" xml:space="preserve">
|
||||
<value>管理</value>
|
||||
@@ -1119,7 +1119,7 @@
|
||||
<value>九月</value>
|
||||
</data>
|
||||
<data name="SSN" xml:space="preserve">
|
||||
<value>社会保障号码</value>
|
||||
<value>社会保险号码</value>
|
||||
</data>
|
||||
<data name="StateProvince" xml:space="preserve">
|
||||
<value>州 / 省</value>
|
||||
@@ -1269,10 +1269,10 @@
|
||||
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
|
||||
</data>
|
||||
<data name="HoldYubikeyNearTop" xml:space="preserve">
|
||||
<value>把你的 YubiKey 靠近设备的顶部。</value>
|
||||
<value>把你的 Yubikey 靠近设备的顶部。</value>
|
||||
</data>
|
||||
<data name="TryAgain" xml:space="preserve">
|
||||
<value>请重试</value>
|
||||
<value>再试一次</value>
|
||||
</data>
|
||||
<data name="YubiKeyInstructionIos" xml:space="preserve">
|
||||
<value>要继续,请将您的 YubiKey NEO 靠在设备背面。</value>
|
||||
@@ -1804,7 +1804,7 @@
|
||||
<value>密码不符合组织要求。请检查策略信息然后重试。</value>
|
||||
</data>
|
||||
<data name="Loading" xml:space="preserve">
|
||||
<value>加载中</value>
|
||||
<value>载入中</value>
|
||||
</data>
|
||||
<data name="AcceptPolicies" xml:space="preserve">
|
||||
<value>激活此开关表示您同意:</value>
|
||||
@@ -2257,7 +2257,7 @@
|
||||
<value>密码不可见,点击以显示。</value>
|
||||
</data>
|
||||
<data name="FilterByVault" xml:space="preserve">
|
||||
<value>按密码库筛选项目</value>
|
||||
<value>按密码库过滤项目</value>
|
||||
</data>
|
||||
<data name="AllVaults" xml:space="preserve">
|
||||
<value>所有密码库</value>
|
||||
@@ -2402,7 +2402,7 @@
|
||||
<value>随机单词</value>
|
||||
</data>
|
||||
<data name="EmailRequiredParenthesis" xml:space="preserve">
|
||||
<value>电子邮箱(必填)</value>
|
||||
<value>电子邮件地址(必填)</value>
|
||||
</data>
|
||||
<data name="DomainNameRequiredParenthesis" xml:space="preserve">
|
||||
<value>域名(必填)</value>
|
||||
@@ -2750,7 +2750,7 @@
|
||||
<value>登录已批准</value>
|
||||
</data>
|
||||
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
|
||||
<value>必须在 Bitwarden App 的设置中启用设备登录。需要其他登录选项吗?</value>
|
||||
<value>设备登录必须在 Bitwarden 应用程序的设置中启用。需要其他登录选项吗?</value>
|
||||
</data>
|
||||
<data name="LogInWithDevice" xml:space="preserve">
|
||||
<value>使用设备登录</value>
|
||||
|
||||
@@ -422,7 +422,7 @@
|
||||
<value>自動填入服務</value>
|
||||
</data>
|
||||
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
||||
<value>於裝置設定中將 Bitwarden 設為您的密鑰提供者。</value>
|
||||
<value>Set Bitwarden as your passkey provider in device settings.</value>
|
||||
</data>
|
||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||
<value>避免易混淆的字元</value>
|
||||
@@ -910,7 +910,7 @@
|
||||
<value>複製 TOTP</value>
|
||||
</data>
|
||||
<data name="CopyTotpAutomaticallyDescription" xml:space="preserve">
|
||||
<value>若登入資訊已包含驗證器金鑰,在自動填入此登入資訊時,TOTP 驗證碼將複製至您的剪貼簿。</value>
|
||||
<value>若登入資料已包含驗證器金鑰,在自動填入此登入資料時,TOTP 驗證碼將複製至您的剪貼簿。</value>
|
||||
</data>
|
||||
<data name="CopyTotpAutomatically" xml:space="preserve">
|
||||
<value>自動複製 TOTP</value>
|
||||
@@ -949,7 +949,7 @@
|
||||
<value>更新加密金鑰前不能使用此功能。</value>
|
||||
</data>
|
||||
<data name="EncryptionKeyMigrationRequiredDescriptionLong" xml:space="preserve">
|
||||
<value>需要遷移加密金鑰。請透過網頁版登入密碼庫以更新您的加密金鑰。</value>
|
||||
<value>需要遷移加密金鑰。請透過網頁版密碼庫登入以更新您的加密金鑰。</value>
|
||||
</data>
|
||||
<data name="LearnMore" xml:space="preserve">
|
||||
<value>深入了解</value>
|
||||
@@ -1101,7 +1101,7 @@
|
||||
<value>Ms</value>
|
||||
</data>
|
||||
<data name="Mx" xml:space="preserve">
|
||||
<value>非二元</value>
|
||||
<value>Mx</value>
|
||||
</data>
|
||||
<data name="November" xml:space="preserve">
|
||||
<value>十一月</value>
|
||||
@@ -1195,7 +1195,7 @@
|
||||
<value>Windows Hello</value>
|
||||
</data>
|
||||
<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 name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||
<value>我們無法為您自動開啟 Android 自動填入設定選單。您可以從 Android 設定 > 系統 > 語言與輸入設定 > 進階 > 自動填入服務,手動到達自動填入設定選單。</value>
|
||||
@@ -1822,7 +1822,7 @@
|
||||
<value>Bitwarden 需要注意 - 請到 Bitwarden 設定的「自動填入服務」中啟用「Draw-Over」</value>
|
||||
</data>
|
||||
<data name="PasskeyManagement" xml:space="preserve">
|
||||
<value>金鑰管理</value>
|
||||
<value>Passkey management</value>
|
||||
</data>
|
||||
<data name="AutofillServices" xml:space="preserve">
|
||||
<value>自動填入服務</value>
|
||||
@@ -2363,7 +2363,7 @@
|
||||
<value>批准登入要求</value>
|
||||
</data>
|
||||
<data name="UseThisDeviceToApproveLoginRequestsMadeFromOtherDevices" xml:space="preserve">
|
||||
<value>使用此裝置批准來自其他裝置的登入要求</value>
|
||||
<value>使用此裝置批准來自其他裝置的登入要求。</value>
|
||||
</data>
|
||||
<data name="AllowNotifications" xml:space="preserve">
|
||||
<value>允許通知</value>
|
||||
@@ -2509,7 +2509,7 @@
|
||||
<value>使用其他裝置登入</value>
|
||||
</data>
|
||||
<data name="LogInInitiated" xml:space="preserve">
|
||||
<value>已啟動登入</value>
|
||||
<value>登入已發起</value>
|
||||
</data>
|
||||
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
|
||||
<value>通知已傳送至您的裝置。</value>
|
||||
@@ -2530,7 +2530,7 @@
|
||||
<value>此請求已失效</value>
|
||||
</data>
|
||||
<data name="PendingLogInRequests" xml:space="preserve">
|
||||
<value>待處理的登入請求</value>
|
||||
<value>待處理的登入請求。</value>
|
||||
</data>
|
||||
<data name="DeclineAllRequests" xml:space="preserve">
|
||||
<value>拒絕所有要求</value>
|
||||
@@ -2599,7 +2599,7 @@
|
||||
<value>需要單一登入 (SSO) 組織識別碼。</value>
|
||||
</data>
|
||||
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
|
||||
<value>將金鑰新增到現有或新的項目</value>
|
||||
<value>將金輪新增到現有或新的項目</value>
|
||||
</data>
|
||||
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
|
||||
<value>您的密碼庫中沒有與「{0}」一致的項目</value>
|
||||
@@ -2608,7 +2608,7 @@
|
||||
<value>搜尋項目或新增項目</value>
|
||||
</data>
|
||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||
<value>您的密碼庫中沒有與搜尋目標一致的項目</value>
|
||||
<value>您的密碼庫中沒有與搜尋一致的項目</value>
|
||||
</data>
|
||||
<data name="US" xml:space="preserve">
|
||||
<value>美國</value>
|
||||
@@ -2617,7 +2617,7 @@
|
||||
<value>歐盟</value>
|
||||
</data>
|
||||
<data name="SelfHosted" xml:space="preserve">
|
||||
<value>自架</value>
|
||||
<value>自我裝載</value>
|
||||
</data>
|
||||
<data name="DataRegion" xml:space="preserve">
|
||||
<value>資料區域</value>
|
||||
@@ -2626,7 +2626,7 @@
|
||||
<value>區域</value>
|
||||
</data>
|
||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||
<value>您的主密碼不符合您的組織政策之一或多個要求。您必須立即更新您的主密碼以存取密碼庫。進行此操作將登出您目前的工作階段,需要您重新登入。其他裝置上的工作階段可能持續長達一小時。</value>
|
||||
<value>您的主密碼不符合您的組織政策之一或多個要求。您必須立即更新您的主密碼以存取密碼庫。進行此操作將登出您目前的工作階段,需要您重新登入。其他裝置上的工作階段可能繼續長達一小時。</value>
|
||||
</data>
|
||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||
<value>目前主密碼</value>
|
||||
@@ -2644,7 +2644,7 @@
|
||||
<value>使用主密碼核准</value>
|
||||
</data>
|
||||
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
|
||||
<value>使用公用裝置來關閉</value>
|
||||
<value>不允許使用公用裝置</value>
|
||||
</data>
|
||||
<data name="RememberThisDevice" xml:space="preserve">
|
||||
<value>記住這個裝置</value>
|
||||
@@ -2665,7 +2665,7 @@
|
||||
<value>密碼金鑰不會被複製</value>
|
||||
</data>
|
||||
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
|
||||
<value>不會將密碼金鑰複製到拓製的項目中。您想繼續拓製該項目嗎?</value>
|
||||
<value>密碼金鑰不會被複製到克隆的項目。 您想繼續克隆該項目嗎?</value>
|
||||
</data>
|
||||
<data name="CopyApplication" xml:space="preserve">
|
||||
<value>複製應用程式</value>
|
||||
@@ -2674,13 +2674,13 @@
|
||||
<value>可用於兩步驟登入</value>
|
||||
</data>
|
||||
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||
<value>主密碼重新詢問說明</value>
|
||||
<value>重新詢問主密碼幫助</value>
|
||||
</data>
|
||||
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||
<value>由於記憶體不足,解鎖可能會失敗。請減少您的 KDF 記憶體設定或設定生物特徵識別解鎖來解決此問題。</value>
|
||||
</data>
|
||||
<data name="InvalidAPIKey" xml:space="preserve">
|
||||
<value>無效的 API 金鑰</value>
|
||||
<value>無效的 API 金輪</value>
|
||||
</data>
|
||||
<data name="InvalidAPIToken" xml:space="preserve">
|
||||
<value>無效的 API 權杖</value>
|
||||
@@ -2689,7 +2689,7 @@
|
||||
<value>已要求管理員核准</value>
|
||||
</data>
|
||||
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
|
||||
<value>您的要求已傳送給您的管理員。</value>
|
||||
<value>您的要求已傳送給您的管理員</value>
|
||||
</data>
|
||||
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
|
||||
<value>核准後將通知您。 </value>
|
||||
@@ -2707,44 +2707,44 @@
|
||||
<value>封鎖表單自動填入功能</value>
|
||||
</data>
|
||||
<data name="AutoFillWillNotBeOfferedForTheseURIs" xml:space="preserve">
|
||||
<value>不對下列網址提供自動填寫功能。</value>
|
||||
<value>不對下列 URI 提供自動填寫功能。</value>
|
||||
</data>
|
||||
<data name="NewBlockedURI" xml:space="preserve">
|
||||
<value>新增要封鎖的網址</value>
|
||||
<value>新增要封鎖的 URI</value>
|
||||
</data>
|
||||
<data name="URISaved" xml:space="preserve">
|
||||
<value>已儲存網址</value>
|
||||
<value>已儲存 URI</value>
|
||||
</data>
|
||||
<data name="InvalidFormatUseHttpsHttpOrAndroidApp" xml:space="preserve">
|
||||
<value>格式無效,請用 https://、http:// 或 androidapp:// 開頭</value>
|
||||
<comment>https://, http://, androidapp:// should not be translated</comment>
|
||||
</data>
|
||||
<data name="EditURI" xml:space="preserve">
|
||||
<value>編輯網址</value>
|
||||
<value>編輯 URI</value>
|
||||
</data>
|
||||
<data name="EnterURI" xml:space="preserve">
|
||||
<value>輸入網址</value>
|
||||
<value>輸入 URI</value>
|
||||
</data>
|
||||
<data name="FormatXSeparateMultipleURIsWithAComma" xml:space="preserve">
|
||||
<value>格式:{0},可用逗號分隔多組網址。</value>
|
||||
<value>格式:{0},可用逗號分隔多組 URI。</value>
|
||||
</data>
|
||||
<data name="FormatX" xml:space="preserve">
|
||||
<value>格式:{0}</value>
|
||||
</data>
|
||||
<data name="InvalidURI" xml:space="preserve">
|
||||
<value>網址無效</value>
|
||||
<value>URI 無效</value>
|
||||
</data>
|
||||
<data name="URIRemoved" xml:space="preserve">
|
||||
<value>已刪除網址</value>
|
||||
<value>已刪除 URI</value>
|
||||
</data>
|
||||
<data name="ThereAreNoBlockedURIs" xml:space="preserve">
|
||||
<value>沒有被封鎖的統一資源標識符(URI)</value>
|
||||
<value>沒有封鎖的 URI</value>
|
||||
</data>
|
||||
<data name="TheURIXIsAlreadyBlocked" xml:space="preserve">
|
||||
<value>已經封鎖網址 {0}</value>
|
||||
<value>已經封鎖 URI {0}</value>
|
||||
</data>
|
||||
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
|
||||
<value>無法一次編輯多組網址</value>
|
||||
<value>無法一次編輯多組 URI</value>
|
||||
</data>
|
||||
<data name="LoginApproved" xml:space="preserve">
|
||||
<value>登入已核准</value>
|
||||
@@ -2771,7 +2771,7 @@
|
||||
<value>Bitwarden 幫助中心</value>
|
||||
</data>
|
||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||
<value>連絡 Bitwarden 客服</value>
|
||||
<value>連絡 Bitwarden 支援</value>
|
||||
</data>
|
||||
<data name="CopyAppInformation" xml:space="preserve">
|
||||
<value>複製應用程式資訊</value>
|
||||
@@ -2808,38 +2808,38 @@
|
||||
<value>{0} 小時</value>
|
||||
</data>
|
||||
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
||||
<value>使用 Bitwarden 來保存新的通行密鑰(passkey) 和 使用儲存在密碼庫中的通行密鑰(passkey) 來登入。</value>
|
||||
<value>Use Bitwarden to save new passkeys and log in with passkeys stored in your vault.</value>
|
||||
</data>
|
||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||
<value>Android 自動填入框架能協助在裝置上的其他應用程式當中,填入登入資訊。</value>
|
||||
<value>Android 自動填入框架用於協助將登入資訊填入裝置上的其他應用程式。</value>
|
||||
</data>
|
||||
<data name="UseInlineAutofillExplanationLong" xml:space="preserve">
|
||||
<value>如果您選擇的鍵盤支持,請使用内嵌式自動填入。若不支持,請使用預設疊層。</value>
|
||||
<value>如果您選擇的鍵盤支持,請使用内嵌式自動填入。否則,使用預設覆蓋。</value>
|
||||
</data>
|
||||
<data name="AdditionalOptions" xml:space="preserve">
|
||||
<value>額外選項</value>
|
||||
</data>
|
||||
<data name="ContinueToWebApp" xml:space="preserve">
|
||||
<value>接下來前往網頁應用程式嗎?</value>
|
||||
<value>接下來造訪 Web App 嗎?</value>
|
||||
</data>
|
||||
<data name="ContinueToX" xml:space="preserve">
|
||||
<value>接下來前往 {0} 嗎?</value>
|
||||
<value>接下來造訪 {0} 嗎?</value>
|
||||
<comment>The parameter is an URL, like bitwarden.com.</comment>
|
||||
</data>
|
||||
<data name="ContinueToHelpCenter" xml:space="preserve">
|
||||
<value>接下來前往說明中心嗎?</value>
|
||||
<value>接下來造訪幫助中心嗎?</value>
|
||||
</data>
|
||||
<data name="ContinueToContactSupport" xml:space="preserve">
|
||||
<value>接下來聯絡支援嗎?</value>
|
||||
</data>
|
||||
<data name="ContinueToPrivacyPolicy" xml:space="preserve">
|
||||
<value>繼續前往隱私權政策?</value>
|
||||
<value>Continue to privacy policy?</value>
|
||||
</data>
|
||||
<data name="ContinueToAppStore" xml:space="preserve">
|
||||
<value>接下來前往 App Store 嗎?</value>
|
||||
<value>接下來造訪 App Store 嗎?</value>
|
||||
</data>
|
||||
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
||||
<value>繼續前往裝置設定?</value>
|
||||
<value>Continue to device Settings?</value>
|
||||
</data>
|
||||
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
||||
<value>在 Bitwarden Web 應用程式中設定兩步驟登入,讓您的帳戶更加安全。</value>
|
||||
@@ -2852,13 +2852,13 @@
|
||||
<comment>The parameter is an URL, like vault.bitwarden.com.</comment>
|
||||
</data>
|
||||
<data name="LearnMoreAboutHowToUseBitwardenOnTheHelpCenter" xml:space="preserve">
|
||||
<value>在說明中心了解有關如何使用 Bitwarden 的更多資訊。</value>
|
||||
<value>在幫助中心了解有關如何使用 Bitwarden 的更多資訊。</value>
|
||||
</data>
|
||||
<data name="ContactSupportDescriptionLong" xml:space="preserve">
|
||||
<value>找不到您想要的資訊?請在 bitwarden.com 上聯絡 Bitwarden 技術支援。</value>
|
||||
<value>不能找到你想要的?請在 bitwarden.com 上聯絡 Bitwarden 支援。</value>
|
||||
</data>
|
||||
<data name="PrivacyPolicyDescriptionLong" xml:space="preserve">
|
||||
<value>在 bitwarden.com 上查看我們的隱私權政策。</value>
|
||||
<value>Check out our privacy policy on bitwarden.com.</value>
|
||||
</data>
|
||||
<data name="ExploreMoreFeaturesOfYourBitwardenAccountOnTheWebApp" xml:space="preserve">
|
||||
<value>在 Web 應用程式上探索 Bitwarden 帳戶的更多功能。</value>
|
||||
@@ -2883,16 +2883,16 @@
|
||||
<value>帳戶已登出。</value>
|
||||
</data>
|
||||
<data name="YourOrganizationPermissionsWereUpdatedRequeringYouToSetAMasterPassword" xml:space="preserve">
|
||||
<value>您的組織的權限已更新,因此您必須設定主密碼。</value>
|
||||
<value>您的組織權限已更新,需要您設定主密碼。</value>
|
||||
</data>
|
||||
<data name="YourOrganizationRequiresYouToSetAMasterPassword" xml:space="preserve">
|
||||
<value>您的組織需要您設定主密碼。</value>
|
||||
<value>您的組織要求您設定主密碼。</value>
|
||||
</data>
|
||||
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
||||
<value>設定解鎖選項,變更您密碼庫的逾時動作。</value>
|
||||
<value>設定一個解鎖方式來變更您的密碼庫逾時動作。</value>
|
||||
</data>
|
||||
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||
<value>選擇登入項目以保存這個通行密鑰(passkey) </value>
|
||||
<value>Choose a login to save this passkey to</value>
|
||||
</data>
|
||||
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||
<value>Save passkey as new login</value>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.8bit.bitwarden.autofill</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2024.10.111</string>
|
||||
<string>2024.7.2</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>CFBundleLocalizations</key>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.8bit.bitwarden.find-login-action-extension</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2024.10.111</string>
|
||||
<string>2024.7.2</string>
|
||||
<key>CFBundleLocalizations</key>
|
||||
<array>
|
||||
<string>en</string>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2024.10.111</string>
|
||||
<string>2024.7.2</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>MinimumOSVersion</key>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"Add2FactorAutenticationToAnItemToViewVerificationCodes" = "Doğrulama kodlarına baxmaq üçün bir elementə 2 faktorlu kimlik doğrulama əlavə edin";
|
||||
"LogInToBitwardenOnYourIPhoneToViewVerificationCodes" = "Doğrulama kodlarına baxmaq üçün iPhone-nunuzda Bitwarden-ə giriş edin";
|
||||
"SyncingItemsContainingVerificationCodes" = "Doğrulama kodlarını ehtiva edən elementlər sinxronlaşdırılır";
|
||||
"UnlockBitwardenOnYourIPhoneToViewVerificationCodes" = "Doğrulama kodlarına baxmaq üçün Bitwarden-in kilidini iPhone-nunuzda açın";
|
||||
"UnlockBitwardenOnYourIPhoneToViewVerificationCodes" = "Doğrulama kodlarına baxmaq üçün iPhone-nunuzda Bitwarden-in kilidini açın";
|
||||
"SetUpBitwardenToViewItemsContainingVerificationCodes" = "Doğrulama kodlarını ehtiva edən elementlərə baxmaq üçün Bitwarden-i quraşdırın";
|
||||
"Search" = "Axtar";
|
||||
"NoItemsFound" = "Heç bir element tapılmadı";
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user