mirror of
https://github.com/bitwarden/mobile
synced 2025-12-15 15:53:44 +00:00
Compare commits
55 Commits
PM-2149-im
...
feature/pm
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2014d7f562 | ||
|
|
8a399235f4 | ||
|
|
ce55750e60 | ||
|
|
a15269bafe | ||
|
|
8a59e17fc9 | ||
|
|
548bd12a8e | ||
|
|
58542fd255 | ||
|
|
fc300f3e3f | ||
|
|
800b4c71de | ||
|
|
7bcf1c377f | ||
|
|
11947ce99a | ||
|
|
3053eaa036 | ||
|
|
109a84607a | ||
|
|
d2b6c73a75 | ||
|
|
9dc6a725cf | ||
|
|
4abb472998 | ||
|
|
6268f0776b | ||
|
|
cbbc41be67 | ||
|
|
1d541e5b8e | ||
|
|
175b9936b6 | ||
|
|
72e67bd6f2 | ||
|
|
e164fb9823 | ||
|
|
87866304a6 | ||
|
|
216c6abcf6 | ||
|
|
1014563c75 | ||
|
|
3506269811 | ||
|
|
31487a31bb | ||
|
|
1407aa5655 | ||
|
|
16f59e2698 | ||
|
|
d876b54f45 | ||
|
|
6644e3b449 | ||
|
|
8d98d1d5bd | ||
|
|
3e9711f8f2 | ||
|
|
3af37f01d3 | ||
|
|
43d2d386b1 | ||
|
|
bc5c11b47f | ||
|
|
52843b4181 | ||
|
|
98705e443f | ||
|
|
1332ef7b43 | ||
|
|
04e30c2146 | ||
|
|
f604da13a1 | ||
|
|
dcf9acb51c | ||
|
|
3b087c50ae | ||
|
|
1c13ed9895 | ||
|
|
eeb634e698 | ||
|
|
8bc2df6c8a | ||
|
|
7cd40d4d89 | ||
|
|
bebf23785d | ||
|
|
e78833cbcb | ||
|
|
b7ff636862 | ||
|
|
0288a6659c | ||
|
|
c7fd113f26 | ||
|
|
79241731e7 | ||
|
|
74e9914f5b | ||
|
|
84a82f0876 |
57
.github/renovate.json
vendored
57
.github/renovate.json
vendored
@@ -1,22 +1,37 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
"extends": [
|
"extends": [
|
||||||
"config:base",
|
"config:base",
|
||||||
"schedule:monthly",
|
":combinePatchMinorReleases",
|
||||||
":maintainLockFilesMonthly",
|
":dependencyDashboard",
|
||||||
":preserveSemverRanges",
|
":maintainLockFilesWeekly",
|
||||||
":rebaseStalePrs",
|
":pinAllExceptPeerDependencies",
|
||||||
":disableDependencyDashboard"
|
":prConcurrentLimit10",
|
||||||
],
|
":rebaseStalePrs",
|
||||||
"enabledManagers": [
|
"schedule:weekends",
|
||||||
"nuget"
|
":separateMajorReleases"
|
||||||
],
|
],
|
||||||
"packageRules": [
|
"enabledManagers": ["cargo", "github-actions", "npm", "nuget"],
|
||||||
{
|
"packageRules": [
|
||||||
"matchManagers": ["nuget"],
|
{
|
||||||
"groupName": "Nuget updates",
|
"groupName": "cargo minor",
|
||||||
"groupSlug": "nuget",
|
"matchManagers": ["cargo"],
|
||||||
"separateMajorMinor": false
|
"matchUpdateTypes": ["minor", "patch"]
|
||||||
}
|
},
|
||||||
]
|
{
|
||||||
}
|
"groupName": "gh minor",
|
||||||
|
"matchManagers": ["github-actions"],
|
||||||
|
"matchUpdateTypes": ["minor", "patch"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupName": "npm minor",
|
||||||
|
"matchManagers": ["npm"],
|
||||||
|
"matchUpdateTypes": ["minor", "patch"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupName": "nuget minor",
|
||||||
|
"matchManagers": ["nuget"],
|
||||||
|
"matchUpdateTypes": ["minor", "patch"]
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|||||||
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -793,7 +793,7 @@ jobs:
|
|||||||
done
|
done
|
||||||
|
|
||||||
- name: Upload Sources
|
- name: Upload Sources
|
||||||
uses: crowdin/github-action@ecd7eb0ef6f3cfa16293c79e9cbc4bc5b5fd9c49 # v1.4.9
|
uses: crowdin/github-action@965d501f160af7b1f88aed4c29154b0caf1e94b9 # v1.9.0
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
||||||
|
|||||||
2
.github/workflows/crowdin-pull.yml
vendored
2
.github/workflows/crowdin-pull.yml
vendored
@@ -30,7 +30,7 @@ jobs:
|
|||||||
secrets: "crowdin-api-token, github-gpg-private-key, github-gpg-private-key-passphrase"
|
secrets: "crowdin-api-token, github-gpg-private-key, github-gpg-private-key-passphrase"
|
||||||
|
|
||||||
- name: Download translations
|
- name: Download translations
|
||||||
uses: crowdin/github-action@ecd7eb0ef6f3cfa16293c79e9cbc4bc5b5fd9c49 # v1.4.9
|
uses: crowdin/github-action@965d501f160af7b1f88aed4c29154b0caf1e94b9 # v1.9.0
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
||||||
|
|||||||
2
.github/workflows/enforce-labels.yml
vendored
2
.github/workflows/enforce-labels.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
|||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
- name: Enforce Label
|
- name: Enforce Label
|
||||||
uses: yogevbd/enforce-label-action@a3c219da6b8fa73f6ba62b68ff09c469b3a1c024 # v2.2.2
|
uses: yogevbd/enforce-label-action@a3c219da6b8fa73f6ba62b68ff09c469b3a1c024 # 2.2.2
|
||||||
with:
|
with:
|
||||||
BANNED_LABELS: "hold,needs-qa"
|
BANNED_LABELS: "hold,needs-qa"
|
||||||
BANNED_LABELS_DESCRIPTION: "PRs with the hold or needs-qa labels cannot be merged"
|
BANNED_LABELS_DESCRIPTION: "PRs with the hold or needs-qa labels cannot be merged"
|
||||||
|
|||||||
8
.github/workflows/release.yml
vendored
8
.github/workflows/release.yml
vendored
@@ -68,7 +68,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Download all artifacts
|
- name: Download all artifacts
|
||||||
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
|
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
|
||||||
uses: dawidd6/action-download-artifact@575b1e4167df67acf7e692af784566618b23c71e # v2.17.10
|
uses: dawidd6/action-download-artifact@246dbf436b23d7c49e21a7ab8204ca9ecd1fe615 # v2.27.0
|
||||||
with:
|
with:
|
||||||
workflow: build.yml
|
workflow: build.yml
|
||||||
workflow_conclusion: success
|
workflow_conclusion: success
|
||||||
@@ -76,7 +76,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Dry Run - Download all artifacts
|
- name: Dry Run - Download all artifacts
|
||||||
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
|
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
|
||||||
uses: dawidd6/action-download-artifact@575b1e4167df67acf7e692af784566618b23c71e # v2.17.10
|
uses: dawidd6/action-download-artifact@246dbf436b23d7c49e21a7ab8204ca9ecd1fe615 # v2.27.0
|
||||||
with:
|
with:
|
||||||
workflow: build.yml
|
workflow: build.yml
|
||||||
workflow_conclusion: success
|
workflow_conclusion: success
|
||||||
@@ -130,7 +130,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Download F-Droid .apk artifact
|
- name: Download F-Droid .apk artifact
|
||||||
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
|
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
|
||||||
uses: dawidd6/action-download-artifact@575b1e4167df67acf7e692af784566618b23c71e # v2.17.10
|
uses: dawidd6/action-download-artifact@246dbf436b23d7c49e21a7ab8204ca9ecd1fe615 # v2.27.0
|
||||||
with:
|
with:
|
||||||
workflow: build.yml
|
workflow: build.yml
|
||||||
workflow_conclusion: success
|
workflow_conclusion: success
|
||||||
@@ -139,7 +139,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Dry Run - Download F-Droid .apk artifact
|
- name: Dry Run - Download F-Droid .apk artifact
|
||||||
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
|
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
|
||||||
uses: dawidd6/action-download-artifact@575b1e4167df67acf7e692af784566618b23c71e # v2.17.10
|
uses: dawidd6/action-download-artifact@246dbf436b23d7c49e21a7ab8204ca9ecd1fe615 # v2.27.0
|
||||||
with:
|
with:
|
||||||
workflow: build.yml
|
workflow: build.yml
|
||||||
workflow_conclusion: success
|
workflow_conclusion: success
|
||||||
|
|||||||
@@ -159,6 +159,7 @@
|
|||||||
<Compile Include="Constants.cs" />
|
<Compile Include="Constants.cs" />
|
||||||
<Compile Include="Effects\RemoveFontPaddingEffect.cs" />
|
<Compile Include="Effects\RemoveFontPaddingEffect.cs" />
|
||||||
<Compile Include="Services\WatchDeviceService.cs" />
|
<Compile Include="Services\WatchDeviceService.cs" />
|
||||||
|
<Compile Include="Renderers\CustomLabelRenderer.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AndroidAsset Include="Assets\bwi-font.ttf" />
|
<AndroidAsset Include="Assets\bwi-font.ttf" />
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ namespace Bit.Droid.Autofill
|
|||||||
private List<Field> _passwordFields = null;
|
private List<Field> _passwordFields = null;
|
||||||
private List<Field> _usernameFields = null;
|
private List<Field> _usernameFields = null;
|
||||||
private HashSet<string> _ignoreSearchTerms = new HashSet<string> { "search", "find", "recipient", "edit" };
|
private HashSet<string> _ignoreSearchTerms = new HashSet<string> { "search", "find", "recipient", "edit" };
|
||||||
private HashSet<string> _usernameTerms = new HashSet<string> { "email", "phone", "username"};
|
private HashSet<string> _usernameTerms = new HashSet<string> { "email", "phone", "username" };
|
||||||
private HashSet<string> _passwordTerms = new HashSet<string> { "password", "pswd" };
|
private HashSet<string> _passwordTerms = new HashSet<string> { "password", "pswd" };
|
||||||
|
|
||||||
public List<AutofillId> AutofillIds { get; private set; } = new List<AutofillId>();
|
public List<AutofillId> AutofillIds { get; private set; } = new List<AutofillId>();
|
||||||
@@ -54,15 +54,14 @@ namespace Bit.Droid.Autofill
|
|||||||
if (HintToFieldsMap.ContainsKey(View.AutofillHintPassword))
|
if (HintToFieldsMap.ContainsKey(View.AutofillHintPassword))
|
||||||
{
|
{
|
||||||
_passwordFields.AddRange(HintToFieldsMap[View.AutofillHintPassword]);
|
_passwordFields.AddRange(HintToFieldsMap[View.AutofillHintPassword]);
|
||||||
|
return _passwordFields;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
_passwordFields = Fields.Where(f => FieldIsPassword(f)).ToList();
|
||||||
|
if (!_passwordFields.Any())
|
||||||
{
|
{
|
||||||
_passwordFields = Fields.Where(f => FieldIsPassword(f)).ToList();
|
_passwordFields = Fields.Where(f => FieldHasPasswordTerms(f)).ToList();
|
||||||
if (!_passwordFields.Any())
|
|
||||||
{
|
|
||||||
_passwordFields = Fields.Where(f => FieldHasPasswordTerms(f)).ToList();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return _passwordFields;
|
return _passwordFields;
|
||||||
}
|
}
|
||||||
@@ -87,24 +86,26 @@ namespace Bit.Droid.Autofill
|
|||||||
{
|
{
|
||||||
_usernameFields.AddRange(HintToFieldsMap[View.AutofillHintUsername]);
|
_usernameFields.AddRange(HintToFieldsMap[View.AutofillHintUsername]);
|
||||||
}
|
}
|
||||||
|
if (_usernameFields.Any())
|
||||||
|
{
|
||||||
|
return _usernameFields;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
foreach (var passwordField in PasswordFields)
|
|
||||||
{
|
|
||||||
var usernameField = Fields.TakeWhile(f => f.AutofillId != passwordField.AutofillId)
|
|
||||||
.LastOrDefault();
|
|
||||||
if (usernameField != null)
|
|
||||||
{
|
|
||||||
_usernameFields.Add(usernameField);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_usernameFields.Any())
|
foreach (var passwordField in PasswordFields)
|
||||||
|
{
|
||||||
|
var usernameField = Fields.TakeWhile(f => f.AutofillId != passwordField.AutofillId)
|
||||||
|
.LastOrDefault();
|
||||||
|
if (usernameField != null)
|
||||||
{
|
{
|
||||||
_usernameFields = Fields.Where(f => FieldIsUsername(f)).ToList();
|
_usernameFields.Add(usernameField);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!_usernameFields.Any())
|
||||||
|
{
|
||||||
|
_usernameFields = Fields.Where(f => FieldIsUsername(f)).ToList();
|
||||||
|
}
|
||||||
return _usernameFields;
|
return _usernameFields;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:versionCode="1" android:versionName="2023.4.1" android:installLocation="internalOnly" package="com.x8bit.bitwarden">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:versionCode="1" android:versionName="2023.5.1" android:installLocation="internalOnly" package="com.x8bit.bitwarden">
|
||||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33" />
|
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33" />
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.NFC" />
|
<uses-permission android:name="android.permission.NFC" />
|
||||||
|
|||||||
31
src/Android/Renderers/CustomLabelRenderer.cs
Normal file
31
src/Android/Renderers/CustomLabelRenderer.cs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using Bit.App.Controls;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using Xamarin.Forms.Platform.Android;
|
||||||
|
using Android.Content;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
using Bit.Droid.Renderers;
|
||||||
|
|
||||||
|
[assembly: ExportRenderer(typeof(CustomLabel), typeof(CustomLabelRenderer))]
|
||||||
|
namespace Bit.Droid.Renderers
|
||||||
|
{
|
||||||
|
public class CustomLabelRenderer : LabelRenderer
|
||||||
|
{
|
||||||
|
public CustomLabelRenderer(Context context)
|
||||||
|
: base(context)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||||
|
{
|
||||||
|
var label = sender as CustomLabel;
|
||||||
|
switch (e.PropertyName)
|
||||||
|
{
|
||||||
|
case nameof(CustomLabel.AutomationId):
|
||||||
|
Control.ContentDescription = label.AutomationId;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
base.OnElementPropertyChanged(sender, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ namespace Bit.Droid.Services
|
|||||||
return launchIntentSender != null;
|
return launchIntentSender != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ShowLoadingAsync(string text, System.Threading.CancellationTokenSource cts = null, string cancelButtonText = null)
|
public async Task ShowLoadingAsync(string text)
|
||||||
{
|
{
|
||||||
if (_progressDialog != null)
|
if (_progressDialog != null)
|
||||||
{
|
{
|
||||||
@@ -98,16 +98,10 @@ namespace Bit.Droid.Services
|
|||||||
txtLoading.Text = text;
|
txtLoading.Text = text;
|
||||||
txtLoading.SetTextColor(ThemeHelpers.TextColor);
|
txtLoading.SetTextColor(ThemeHelpers.TextColor);
|
||||||
|
|
||||||
var progressDialogBuilder = new AlertDialog.Builder(activity)
|
_progressDialog = new AlertDialog.Builder(activity)
|
||||||
.SetView(dialogView)
|
.SetView(dialogView)
|
||||||
.SetCancelable(cts != null);
|
.SetCancelable(false)
|
||||||
|
.Create();
|
||||||
if (cts != null)
|
|
||||||
{
|
|
||||||
progressDialogBuilder.SetNegativeButton(cancelButtonText ?? AppResources.Cancel, (sender, args) => cts?.Cancel());
|
|
||||||
}
|
|
||||||
|
|
||||||
_progressDialog = progressDialogBuilder.Create();
|
|
||||||
_progressDialog.Show();
|
_progressDialog.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using System.Threading;
|
using System.Threading.Tasks;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Bit.Core.Enums;
|
using Bit.Core.Enums;
|
||||||
using Bit.Core.Models;
|
using Bit.Core.Models;
|
||||||
|
|
||||||
@@ -14,7 +13,7 @@ namespace Bit.App.Abstractions
|
|||||||
string GetBuildNumber();
|
string GetBuildNumber();
|
||||||
|
|
||||||
void Toast(string text, bool longDuration = false);
|
void Toast(string text, bool longDuration = false);
|
||||||
Task ShowLoadingAsync(string text, CancellationTokenSource cts = null, string cancelButtonText = null);
|
Task ShowLoadingAsync(string text);
|
||||||
Task HideLoadingAsync();
|
Task HideLoadingAsync();
|
||||||
Task<string> DisplayPromptAync(string title = null, string description = null, string text = null,
|
Task<string> DisplayPromptAync(string title = null, string description = null, string text = null,
|
||||||
string okButtonText = null, string cancelButtonText = null, bool numericKeyboard = false,
|
string okButtonText = null, string cancelButtonText = null, bool numericKeyboard = false,
|
||||||
|
|||||||
@@ -145,6 +145,7 @@
|
|||||||
<Folder Include="Controls\DateTime\" />
|
<Folder Include="Controls\DateTime\" />
|
||||||
<Folder Include="Controls\IconLabelButton\" />
|
<Folder Include="Controls\IconLabelButton\" />
|
||||||
<Folder Include="Controls\PasswordStrengthProgressBar\" />
|
<Folder Include="Controls\PasswordStrengthProgressBar\" />
|
||||||
|
<Folder Include="Utilities\Automation\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -440,5 +441,6 @@
|
|||||||
<None Remove="MessagePack" />
|
<None Remove="MessagePack" />
|
||||||
<None Remove="MessagePack.MSBuild.Tasks" />
|
<None Remove="MessagePack.MSBuild.Tasks" />
|
||||||
<None Remove="Controls\PasswordStrengthProgressBar\" />
|
<None Remove="Controls\PasswordStrengthProgressBar\" />
|
||||||
|
<None Remove="Utilities\Automation\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -30,13 +30,15 @@
|
|||||||
BackgroundColor="{DynamicResource BackgroundColor}"
|
BackgroundColor="{DynamicResource BackgroundColor}"
|
||||||
VerticalOptions="Start"
|
VerticalOptions="Start"
|
||||||
RowHeight="{Binding AccountListRowHeight, Source={x:Reference _mainOverlay}}"
|
RowHeight="{Binding AccountListRowHeight, Source={x:Reference _mainOverlay}}"
|
||||||
effects:ScrollViewContentInsetAdjustmentBehaviorEffect.ContentInsetAdjustmentBehavior="Never">
|
effects:ScrollViewContentInsetAdjustmentBehaviorEffect.ContentInsetAdjustmentBehavior="Never"
|
||||||
|
AutomationId="AccountListView">
|
||||||
<ListView.ItemTemplate>
|
<ListView.ItemTemplate>
|
||||||
<DataTemplate x:DataType="view:AccountView">
|
<DataTemplate x:DataType="view:AccountView">
|
||||||
<controls:AccountViewCell
|
<controls:AccountViewCell
|
||||||
Account="{Binding .}"
|
Account="{Binding .}"
|
||||||
SelectAccountCommand="{Binding SelectAccountCommand, Source={x:Reference _mainOverlay}}"
|
SelectAccountCommand="{Binding SelectAccountCommand, Source={x:Reference _mainOverlay}}"
|
||||||
LongPressAccountCommand="{Binding LongPressAccountCommand, Source={x:Reference _mainOverlay}}"
|
LongPressAccountCommand="{Binding LongPressAccountCommand, Source={x:Reference _mainOverlay}}"
|
||||||
|
AutomationId="AccountViewCell"
|
||||||
/>
|
/>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListView.ItemTemplate>
|
</ListView.ItemTemplate>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ViewCell xmlns="http://xamarin.com/schemas/2014/forms"
|
<ViewCell xmlns="http://xamarin.com/schemas/2014/forms"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
|
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
|
||||||
@@ -60,20 +60,23 @@
|
|||||||
Text="{Binding AccountView.Email}"
|
Text="{Binding AccountView.Email}"
|
||||||
IsVisible="{Binding IsActive}"
|
IsVisible="{Binding IsActive}"
|
||||||
StyleClass="accountlist-title, accountlist-title-platform"
|
StyleClass="accountlist-title, accountlist-title-platform"
|
||||||
LineBreakMode="TailTruncation" />
|
LineBreakMode="TailTruncation"
|
||||||
|
AutomationId="AccountEmailLabel" />
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Text="{Binding AccountView.Email}"
|
Text="{Binding AccountView.Email}"
|
||||||
IsVisible="{Binding IsActive, Converter={StaticResource inverseBool}}"
|
IsVisible="{Binding IsActive, Converter={StaticResource inverseBool}}"
|
||||||
StyleClass="accountlist-title, accountlist-title-platform"
|
StyleClass="accountlist-title, accountlist-title-platform"
|
||||||
TextColor="{DynamicResource MutedColor}"
|
TextColor="{DynamicResource MutedColor}"
|
||||||
LineBreakMode="TailTruncation" />
|
LineBreakMode="TailTruncation"
|
||||||
|
AutomationId="AccountEmailLabel" />
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
IsVisible="{Binding ShowHostname}"
|
IsVisible="{Binding ShowHostname}"
|
||||||
Text="{Binding AccountView.Hostname}"
|
Text="{Binding AccountView.Hostname}"
|
||||||
StyleClass="accountlist-sub, accountlist-sub-platform"
|
StyleClass="accountlist-sub, accountlist-sub-platform"
|
||||||
LineBreakMode="TailTruncation" />
|
LineBreakMode="TailTruncation"
|
||||||
|
AutomationId="AccountHostUrlLabel" />
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="2"
|
Grid.Row="2"
|
||||||
Text="{u:I18n AccountUnlocked}"
|
Text="{u:I18n AccountUnlocked}"
|
||||||
@@ -81,7 +84,8 @@
|
|||||||
StyleClass="accountlist-sub, accountlist-sub-platform"
|
StyleClass="accountlist-sub, accountlist-sub-platform"
|
||||||
FontAttributes="Italic"
|
FontAttributes="Italic"
|
||||||
TextTransform="Lowercase"
|
TextTransform="Lowercase"
|
||||||
LineBreakMode="TailTruncation" />
|
LineBreakMode="TailTruncation"
|
||||||
|
AutomationId="AccountStatusLabel" />
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="2"
|
Grid.Row="2"
|
||||||
Text="{u:I18n AccountLocked}"
|
Text="{u:I18n AccountLocked}"
|
||||||
@@ -89,7 +93,8 @@
|
|||||||
StyleClass="accountlist-sub, accountlist-sub-platform"
|
StyleClass="accountlist-sub, accountlist-sub-platform"
|
||||||
FontAttributes="Italic"
|
FontAttributes="Italic"
|
||||||
TextTransform="Lowercase"
|
TextTransform="Lowercase"
|
||||||
LineBreakMode="TailTruncation" />
|
LineBreakMode="TailTruncation"
|
||||||
|
AutomationId="AccountStatusLabel" />
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="2"
|
Grid.Row="2"
|
||||||
Text="{u:I18n AccountLoggedOut}"
|
Text="{u:I18n AccountLoggedOut}"
|
||||||
@@ -97,7 +102,8 @@
|
|||||||
StyleClass="accountlist-sub, accountlist-sub-platform"
|
StyleClass="accountlist-sub, accountlist-sub-platform"
|
||||||
FontAttributes="Italic"
|
FontAttributes="Italic"
|
||||||
TextTransform="Lowercase"
|
TextTransform="Lowercase"
|
||||||
LineBreakMode="TailTruncation" />
|
LineBreakMode="TailTruncation"
|
||||||
|
AutomationId="AccountStatusLabel" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<controls:IconLabel
|
<controls:IconLabel
|
||||||
@@ -107,7 +113,8 @@
|
|||||||
Margin="12,0"
|
Margin="12,0"
|
||||||
HorizontalOptions="Center"
|
HorizontalOptions="Center"
|
||||||
VerticalOptions="Center"
|
VerticalOptions="Center"
|
||||||
StyleClass="list-icon, list-icon-platform" />
|
StyleClass="list-icon, list-icon-platform"
|
||||||
|
AutomationId="InactiveVaultIcon" />
|
||||||
<controls:IconLabel
|
<controls:IconLabel
|
||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
Text="{Binding AuthStatusIconActive}"
|
Text="{Binding AuthStatusIconActive}"
|
||||||
@@ -116,7 +123,8 @@
|
|||||||
HorizontalOptions="Center"
|
HorizontalOptions="Center"
|
||||||
VerticalOptions="Center"
|
VerticalOptions="Center"
|
||||||
StyleClass="list-icon, list-icon-platform"
|
StyleClass="list-icon, list-icon-platform"
|
||||||
TextColor="{DynamicResource TextColor}"/>
|
TextColor="{DynamicResource TextColor}"
|
||||||
|
AutomationId="ActiveVaultIcon" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<Grid
|
<Grid
|
||||||
@@ -147,7 +155,8 @@
|
|||||||
StyleClass="accountlist-title, accountlist-title-platform"
|
StyleClass="accountlist-title, accountlist-title-platform"
|
||||||
LineBreakMode="TailTruncation"
|
LineBreakMode="TailTruncation"
|
||||||
VerticalOptions="Center"
|
VerticalOptions="Center"
|
||||||
Grid.Column="1" />
|
Grid.Column="1"
|
||||||
|
AutomationId="AddAccountButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</ViewCell>
|
</ViewCell>
|
||||||
@@ -9,7 +9,8 @@
|
|||||||
StyleClass="list-row, list-row-platform"
|
StyleClass="list-row, list-row-platform"
|
||||||
RowSpacing="0"
|
RowSpacing="0"
|
||||||
ColumnSpacing="0"
|
ColumnSpacing="0"
|
||||||
x:DataType="controls:CipherViewCellViewModel">
|
x:DataType="controls:CipherViewCellViewModel"
|
||||||
|
AutomationId="CipherCell">
|
||||||
|
|
||||||
<Grid.Resources>
|
<Grid.Resources>
|
||||||
<u:IconGlyphConverter x:Key="iconGlyphConverter"/>
|
<u:IconGlyphConverter x:Key="iconGlyphConverter"/>
|
||||||
@@ -36,7 +37,8 @@
|
|||||||
IsVisible="{Binding ShowIconImage, Converter={StaticResource inverseBool}}"
|
IsVisible="{Binding ShowIconImage, Converter={StaticResource inverseBool}}"
|
||||||
Text="{Binding Cipher, Converter={StaticResource iconGlyphConverter}}"
|
Text="{Binding Cipher, Converter={StaticResource iconGlyphConverter}}"
|
||||||
ShouldUpdateFontSizeDynamicallyForAccesibility="True"
|
ShouldUpdateFontSizeDynamicallyForAccesibility="True"
|
||||||
AutomationProperties.IsInAccessibleTree="False" />
|
AutomationProperties.IsInAccessibleTree="False"
|
||||||
|
AutomationId="CipherTypeIcon" />
|
||||||
|
|
||||||
<ff:CachedImage
|
<ff:CachedImage
|
||||||
x:Name="_iconImage"
|
x:Name="_iconImage"
|
||||||
@@ -52,7 +54,8 @@
|
|||||||
Aspect="AspectFit"
|
Aspect="AspectFit"
|
||||||
IsVisible="{Binding ShowIconImage}"
|
IsVisible="{Binding ShowIconImage}"
|
||||||
Source="{Binding IconImageSource, Mode=OneTime}"
|
Source="{Binding IconImageSource, Mode=OneTime}"
|
||||||
AutomationProperties.IsInAccessibleTree="False" />
|
AutomationProperties.IsInAccessibleTree="False"
|
||||||
|
AutomationId="CipherWebsiteIcon" />
|
||||||
|
|
||||||
<Grid RowSpacing="0" ColumnSpacing="0" Grid.Row="0" Grid.Column="1" VerticalOptions="Center" Padding="0, 7">
|
<Grid RowSpacing="0" ColumnSpacing="0" Grid.Row="0" Grid.Column="1" VerticalOptions="Center" Padding="0, 7">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
@@ -71,7 +74,8 @@
|
|||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
StyleClass="list-title, list-title-platform"
|
StyleClass="list-title, list-title-platform"
|
||||||
Text="{Binding Cipher.Name}" />
|
Text="{Binding Cipher.Name}"
|
||||||
|
AutomationId="CipherNameLabel" />
|
||||||
<Label
|
<Label
|
||||||
LineBreakMode="TailTruncation"
|
LineBreakMode="TailTruncation"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
@@ -80,7 +84,8 @@
|
|||||||
StyleClass="list-subtitle, list-subtitle-platform"
|
StyleClass="list-subtitle, list-subtitle-platform"
|
||||||
Text="{Binding Cipher.SubTitle}"
|
Text="{Binding Cipher.SubTitle}"
|
||||||
IsVisible="{Binding Source={RelativeSource Self}, Path=Text,
|
IsVisible="{Binding Source={RelativeSource Self}, Path=Text,
|
||||||
Converter={StaticResource stringHasValueConverter}}"/>
|
Converter={StaticResource stringHasValueConverter}}"
|
||||||
|
AutomationId="CipherSubTitleLabel" />
|
||||||
<controls:IconLabel
|
<controls:IconLabel
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
@@ -91,7 +96,8 @@
|
|||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Collection}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Collection}}"
|
||||||
IsVisible="{Binding Cipher.Shared, Mode=OneTime}"
|
IsVisible="{Binding Cipher.Shared, Mode=OneTime}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Shared}" />
|
AutomationProperties.Name="{u:I18n Shared}"
|
||||||
|
AutomationId="CipherInCollectionIcon" />
|
||||||
<controls:IconLabel
|
<controls:IconLabel
|
||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
@@ -102,7 +108,8 @@
|
|||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Paperclip}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Paperclip}}"
|
||||||
IsVisible="{Binding Cipher.HasAttachments, Mode=OneTime}"
|
IsVisible="{Binding Cipher.HasAttachments, Mode=OneTime}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Attachments}" />
|
AutomationProperties.Name="{u:I18n Attachments}"
|
||||||
|
AutomationId="CipherWithAttachmentsIcon" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<controls:MiButton
|
<controls:MiButton
|
||||||
@@ -114,6 +121,7 @@
|
|||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
HorizontalOptions="EndAndExpand"
|
HorizontalOptions="EndAndExpand"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Options}" />
|
AutomationProperties.Name="{u:I18n Options}"
|
||||||
|
AutomationId="CipherOptionsButton" />
|
||||||
|
|
||||||
</controls:ExtendedGrid>
|
</controls:ExtendedGrid>
|
||||||
13
src/App/Controls/CustomLabel.cs
Normal file
13
src/App/Controls/CustomLabel.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace Bit.App.Controls
|
||||||
|
{
|
||||||
|
public class CustomLabel : Label
|
||||||
|
{
|
||||||
|
public CustomLabel()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<controls:ExtendedGrid xmlns="http://xamarin.com/schemas/2014/forms"
|
<controls:ExtendedGrid xmlns="http://xamarin.com/schemas/2014/forms"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
x:Class="Bit.App.Controls.SendViewCell"
|
x:Class="Bit.App.Controls.SendViewCell"
|
||||||
@@ -54,14 +54,16 @@
|
|||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
StyleClass="list-title, list-title-platform"
|
StyleClass="list-title, list-title-platform"
|
||||||
Text="{Binding Send.Name}" />
|
Text="{Binding Send.Name}"
|
||||||
|
AutomationId="SendNameLabel" />
|
||||||
<Label
|
<Label
|
||||||
LineBreakMode="TailTruncation"
|
LineBreakMode="TailTruncation"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.ColumnSpan="6"
|
Grid.ColumnSpan="6"
|
||||||
StyleClass="list-subtitle, list-subtitle-platform"
|
StyleClass="list-subtitle, list-subtitle-platform"
|
||||||
Text="{Binding Send.DisplayDate}" />
|
Text="{Binding Send.DisplayDate}"
|
||||||
|
AutomationId="SendDateLabel" />
|
||||||
<controls:IconLabel
|
<controls:IconLabel
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
@@ -72,7 +74,8 @@
|
|||||||
Text="{Binding Source={x:Static core:BitwardenIcons.ExclamationTriangle}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.ExclamationTriangle}}"
|
||||||
IsVisible="{Binding Send.Disabled, Mode=OneTime}"
|
IsVisible="{Binding Send.Disabled, Mode=OneTime}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Disabled}" />
|
AutomationProperties.Name="{u:I18n Disabled}"
|
||||||
|
AutomationId="DisabledSendLabel" />
|
||||||
<controls:IconLabel
|
<controls:IconLabel
|
||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
@@ -83,7 +86,8 @@
|
|||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Key}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Key}}"
|
||||||
IsVisible="{Binding Send.HasPassword, Mode=OneTime}"
|
IsVisible="{Binding Send.HasPassword, Mode=OneTime}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Password}" />
|
AutomationProperties.Name="{u:I18n Password}"
|
||||||
|
AutomationId="PasswordProtectedSendLabel" />
|
||||||
<controls:IconLabel
|
<controls:IconLabel
|
||||||
Grid.Column="3"
|
Grid.Column="3"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
@@ -94,7 +98,8 @@
|
|||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Ban}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Ban}}"
|
||||||
IsVisible="{Binding Send.MaxAccessCountReached, Mode=OneTime}"
|
IsVisible="{Binding Send.MaxAccessCountReached, Mode=OneTime}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n MaxAccessCountReached}" />
|
AutomationProperties.Name="{u:I18n MaxAccessCountReached}"
|
||||||
|
AutomationId="SendMaxAccessCountReachedLabel" />
|
||||||
<controls:IconLabel
|
<controls:IconLabel
|
||||||
Grid.Column="4"
|
Grid.Column="4"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
@@ -105,7 +110,8 @@
|
|||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Clock}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Clock}}"
|
||||||
IsVisible="{Binding Send.Expired, Mode=OneTime}"
|
IsVisible="{Binding Send.Expired, Mode=OneTime}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Expired}" />
|
AutomationProperties.Name="{u:I18n Expired}"
|
||||||
|
AutomationId="ExpiredSendLabel" />
|
||||||
<controls:IconLabel
|
<controls:IconLabel
|
||||||
Grid.Column="5"
|
Grid.Column="5"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
@@ -116,7 +122,8 @@
|
|||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Trash}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Trash}}"
|
||||||
IsVisible="{Binding Send.PendingDelete, Mode=OneTime}"
|
IsVisible="{Binding Send.PendingDelete, Mode=OneTime}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n PendingDelete}" />
|
AutomationProperties.Name="{u:I18n PendingDelete}"
|
||||||
|
AutomationId="SendWithPendingDeletionLabel" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<controls:MiButton
|
<controls:MiButton
|
||||||
@@ -129,6 +136,7 @@
|
|||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
HorizontalOptions="EndAndExpand"
|
HorizontalOptions="EndAndExpand"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Options}" />
|
AutomationProperties.Name="{u:I18n Options}"
|
||||||
|
AutomationId="SendOptionsButton" />
|
||||||
|
|
||||||
</controls:ExtendedGrid>
|
</controls:ExtendedGrid>
|
||||||
|
|||||||
@@ -33,7 +33,8 @@
|
|||||||
StyleClass="box-label"
|
StyleClass="box-label"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}" />
|
IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}"
|
||||||
|
AutomationId="BooleanCustomFieldNameLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Field.Name, Mode=OneWay}"
|
Text="{Binding Field.Name, Mode=OneWay}"
|
||||||
IsVisible="{Binding IsEditing}"
|
IsVisible="{Binding IsEditing}"
|
||||||
@@ -49,13 +50,15 @@
|
|||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Margin="0, 5, 0, 0"
|
Margin="0, 5, 0, 0"
|
||||||
IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}" />
|
IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}"
|
||||||
|
AutomationId="BooleanCustomFieldValueLabel" />
|
||||||
<Switch
|
<Switch
|
||||||
IsToggled="{Binding BooleanValue}"
|
IsToggled="{Binding BooleanValue}"
|
||||||
IsVisible="{Binding IsEditing}"
|
IsVisible="{Binding IsEditing}"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2" />
|
Grid.RowSpan="2"
|
||||||
|
AutomationId="BooleanCustomFieldValueToggle" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Cog}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Cog}}"
|
||||||
|
|||||||
@@ -31,7 +31,8 @@
|
|||||||
Text="{Binding Field.Name, Mode=OneWay}"
|
Text="{Binding Field.Name, Mode=OneWay}"
|
||||||
StyleClass="box-label"
|
StyleClass="box-label"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="HiddenCustomFieldNameLabel" />
|
||||||
<StackLayout
|
<StackLayout
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
@@ -39,7 +40,8 @@
|
|||||||
<controls:MonoLabel
|
<controls:MonoLabel
|
||||||
Text="{Binding ValueText, Mode=OneWay}"
|
Text="{Binding ValueText, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
IsVisible="{Binding ShowHiddenValue}" />
|
IsVisible="{Binding ShowHiddenValue}"
|
||||||
|
AutomationId="HiddenCustomFieldValueLabel" />
|
||||||
<controls:MonoLabel
|
<controls:MonoLabel
|
||||||
Text="{Binding Field.MaskedValue, Mode=OneWay}"
|
Text="{Binding Field.MaskedValue, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
@@ -54,7 +56,10 @@
|
|||||||
IsPassword="{Binding ShowHiddenValue, Converter={StaticResource inverseBool}}"
|
IsPassword="{Binding ShowHiddenValue, Converter={StaticResource inverseBool}}"
|
||||||
IsEnabled="{Binding ShowViewHidden}"
|
IsEnabled="{Binding ShowViewHidden}"
|
||||||
IsSpellCheckEnabled="False"
|
IsSpellCheckEnabled="False"
|
||||||
IsTextPredictionEnabled="False">
|
IsTextPredictionEnabled="False"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{Binding Field.Name}"
|
||||||
|
AutomationId="HiddenCustomFieldValueEntry">
|
||||||
<Entry.Keyboard>
|
<Entry.Keyboard>
|
||||||
<Keyboard x:FactoryMethod="Create">
|
<Keyboard x:FactoryMethod="Create">
|
||||||
<x:Arguments>
|
<x:Arguments>
|
||||||
@@ -72,7 +77,8 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}" />
|
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
||||||
|
AutomationId="HiddenCustomFieldShowValueButton" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
||||||
|
|||||||
@@ -29,13 +29,15 @@
|
|||||||
Text="{Binding Field.Name, Mode=OneWay}"
|
Text="{Binding Field.Name, Mode=OneWay}"
|
||||||
StyleClass="box-label"
|
StyleClass="box-label"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="LinkedCustomFieldNameLabel" />
|
||||||
<controls:IconLabel
|
<controls:IconLabel
|
||||||
Text="{Binding ValueText, Mode=OneWay}"
|
Text="{Binding ValueText, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}" />
|
IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}"
|
||||||
|
AutomationId="LinkedCustomFieldValueLabel" />
|
||||||
<StackLayout
|
<StackLayout
|
||||||
StyleClass="box-row, box-row-input"
|
StyleClass="box-row, box-row-input"
|
||||||
IsVisible="{Binding IsEditing}">
|
IsVisible="{Binding IsEditing}">
|
||||||
@@ -44,7 +46,8 @@
|
|||||||
ItemsSource="{Binding LinkedFieldOptions, Mode=OneTime}"
|
ItemsSource="{Binding LinkedFieldOptions, Mode=OneTime}"
|
||||||
SelectedIndex="{Binding LinkedFieldOptionSelectedIndex}"
|
SelectedIndex="{Binding LinkedFieldOptionSelectedIndex}"
|
||||||
ItemDisplayBinding="{Binding Key}"
|
ItemDisplayBinding="{Binding Key}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="LinkedCustomFieldValuePicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
@@ -55,7 +58,8 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Options}" />
|
AutomationProperties.Name="{u:I18n Options}"
|
||||||
|
AutomationId="LinkedCustomFieldOptionsButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<BoxView StyleClass="box-row-separator" IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}" />
|
<BoxView StyleClass="box-row-separator" IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|||||||
@@ -29,19 +29,24 @@
|
|||||||
Text="{Binding Field.Name, Mode=OneWay}"
|
Text="{Binding Field.Name, Mode=OneWay}"
|
||||||
StyleClass="box-label"
|
StyleClass="box-label"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="TextCustomFieldNameLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding ValueText, Mode=OneWay}"
|
Text="{Binding ValueText, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}" />
|
IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}"
|
||||||
|
AutomationId="TextCustomFieldValueLabel" />
|
||||||
<Entry
|
<Entry
|
||||||
Text="{Binding Field.Value}"
|
Text="{Binding Field.Value}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
IsVisible="{Binding IsEditing}" />
|
IsVisible="{Binding IsEditing}"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{Binding Field.Name}"
|
||||||
|
AutomationId="TextCustomFieldValueEntry" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
||||||
@@ -51,7 +56,8 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Copy}" />
|
AutomationProperties.Name="{u:I18n Copy}"
|
||||||
|
AutomationId="TextCustomFieldCopyValue" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Cog}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Cog}}"
|
||||||
@@ -61,7 +67,8 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Options}" />
|
AutomationProperties.Name="{u:I18n Options}"
|
||||||
|
AutomationId="TextCustomFieldOptionsButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<BoxView StyleClass="box-row-separator" IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}" />
|
<BoxView StyleClass="box-row-separator" IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|||||||
@@ -34,7 +34,8 @@
|
|||||||
Placeholder="ex. https://bitwarden.company.com"
|
Placeholder="ex. https://bitwarden.company.com"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
ReturnType="Go"
|
ReturnType="Go"
|
||||||
ReturnCommand="{Binding SubmitCommand}" />
|
ReturnCommand="{Binding SubmitCommand}"
|
||||||
|
AutomationId="ServerUrlEntry"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n SelfHostedEnvironmentFooter}"
|
Text="{u:I18n SelfHostedEnvironmentFooter}"
|
||||||
@@ -53,7 +54,8 @@
|
|||||||
x:Name="_webVaultEntry"
|
x:Name="_webVaultEntry"
|
||||||
Text="{Binding WebVaultUrl}"
|
Text="{Binding WebVaultUrl}"
|
||||||
Keyboard="Url"
|
Keyboard="Url"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="WebVaultUrlEntry"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row">
|
<StackLayout StyleClass="box-row">
|
||||||
<Label
|
<Label
|
||||||
@@ -63,7 +65,8 @@
|
|||||||
x:Name="_apiEntry"
|
x:Name="_apiEntry"
|
||||||
Text="{Binding ApiUrl}"
|
Text="{Binding ApiUrl}"
|
||||||
Keyboard="Url"
|
Keyboard="Url"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ApiUrlEntry"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row">
|
<StackLayout StyleClass="box-row">
|
||||||
<Label
|
<Label
|
||||||
@@ -73,7 +76,8 @@
|
|||||||
x:Name="_identityEntry"
|
x:Name="_identityEntry"
|
||||||
Text="{Binding IdentityUrl}"
|
Text="{Binding IdentityUrl}"
|
||||||
Keyboard="Url"
|
Keyboard="Url"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="IdentityUrlEntry"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row">
|
<StackLayout StyleClass="box-row">
|
||||||
<Label
|
<Label
|
||||||
@@ -85,7 +89,8 @@
|
|||||||
Keyboard="Url"
|
Keyboard="Url"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
ReturnType="Go"
|
ReturnType="Go"
|
||||||
ReturnCommand="{Binding SubmitCommand}" />
|
ReturnCommand="{Binding SubmitCommand}"
|
||||||
|
AutomationId="IconsUrlEntry"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n CustomEnvironmentFooter}"
|
Text="{u:I18n CustomEnvironmentFooter}"
|
||||||
|
|||||||
@@ -23,7 +23,8 @@
|
|||||||
Priority="-1"
|
Priority="-1"
|
||||||
UseOriginalImage="True"
|
UseOriginalImage="True"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Account}" />
|
AutomationProperties.Name="{u:I18n Account}"
|
||||||
|
AutomationId="AccountIconButton" />
|
||||||
<ToolbarItem x:Name="_closeButton" Text="{u:I18n Close}" Command="{Binding CloseCommand}" Order="Primary" Priority="-1"/>
|
<ToolbarItem x:Name="_closeButton" Text="{u:I18n Close}" Command="{Binding CloseCommand}" Order="Primary" Priority="-1"/>
|
||||||
</ContentPage.ToolbarItems>
|
</ContentPage.ToolbarItems>
|
||||||
|
|
||||||
@@ -49,7 +50,9 @@
|
|||||||
Keyboard="Email"
|
Keyboard="Email"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
ReturnType="Go"
|
ReturnType="Go"
|
||||||
ReturnCommand="{Binding ContinueCommand}">
|
ReturnCommand="{Binding ContinueCommand}"
|
||||||
|
AutomationId="EmailAddressEntry"
|
||||||
|
>
|
||||||
<VisualStateManager.VisualStateGroups>
|
<VisualStateManager.VisualStateGroups>
|
||||||
<VisualStateGroup x:Name="CommonStates">
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
<VisualState x:Name="Disabled">
|
<VisualState x:Name="Disabled">
|
||||||
@@ -78,7 +81,8 @@
|
|||||||
FontSize="13"
|
FontSize="13"
|
||||||
TextColor="{DynamicResource PrimaryColor}"
|
TextColor="{DynamicResource PrimaryColor}"
|
||||||
VerticalOptions="Center"
|
VerticalOptions="Center"
|
||||||
VerticalTextAlignment="Center"/>
|
VerticalTextAlignment="Center"
|
||||||
|
AutomationId="RegionSelectorDropdown"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout
|
<StackLayout
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
@@ -92,21 +96,27 @@
|
|||||||
StyleClass="text-sm"
|
StyleClass="text-sm"
|
||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
VerticalOptions="Center"
|
VerticalOptions="Center"
|
||||||
VerticalTextAlignment="Center"/>
|
VerticalTextAlignment="Center"
|
||||||
|
/>
|
||||||
<Switch
|
<Switch
|
||||||
Scale="0.8"
|
Scale="0.8"
|
||||||
IsToggled="{Binding RememberEmail}"
|
IsToggled="{Binding RememberEmail}"
|
||||||
VerticalOptions="Center"/>
|
VerticalOptions="Center"
|
||||||
|
AutomationId="RememberMeSwitch"
|
||||||
|
/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Button Text="{u:I18n Continue}"
|
<Button Text="{u:I18n Continue}"
|
||||||
StyleClass="btn-primary"
|
StyleClass="btn-primary"
|
||||||
IsEnabled="{Binding CanContinue}"
|
IsEnabled="{Binding CanContinue}"
|
||||||
Command="{Binding ContinueCommand}" />
|
Command="{Binding ContinueCommand}"
|
||||||
|
AutomationId="ContinueButton"
|
||||||
|
/>
|
||||||
|
|
||||||
<Label FormattedText="{Binding CreateAccountText}"
|
<Label FormattedText="{Binding CreateAccountText}"
|
||||||
Margin="0, 10"
|
Margin="0, 10"
|
||||||
StyleClass="box-footer-label">
|
StyleClass="box-footer-label"
|
||||||
|
AutomationId="CreateAccountLabel">
|
||||||
<Label.GestureRecognizers>
|
<Label.GestureRecognizers>
|
||||||
<TapGestureRecognizer Command="{Binding CreateAccountCommand}" />
|
<TapGestureRecognizer Command="{Binding CreateAccountCommand}" />
|
||||||
</Label.GestureRecognizers>
|
</Label.GestureRecognizers>
|
||||||
@@ -132,5 +142,4 @@
|
|||||||
MainPage="{Binding Source={x:Reference _page}}"
|
MainPage="{Binding Source={x:Reference _page}}"
|
||||||
BindingContext="{Binding AccountSwitchingOverlayViewModel}"/>
|
BindingContext="{Binding AccountSwitchingOverlayViewModel}"/>
|
||||||
</AbsoluteLayout>
|
</AbsoluteLayout>
|
||||||
|
|
||||||
</pages:BaseContentPage>
|
</pages:BaseContentPage>
|
||||||
|
|||||||
@@ -165,6 +165,7 @@ namespace Bit.App.Pages
|
|||||||
|
|
||||||
public async Task ShowEnvironmentPickerAsync()
|
public async Task ShowEnvironmentPickerAsync()
|
||||||
{
|
{
|
||||||
|
_displayEuEnvironment = await _configService.GetFeatureFlagBoolAsync(Constants.DisplayEuEnvironmentFlag);
|
||||||
var options = _displayEuEnvironment
|
var options = _displayEuEnvironment
|
||||||
? new string[] { AppResources.US, AppResources.EU, AppResources.SelfHosted }
|
? new string[] { AppResources.US, AppResources.EU, AppResources.SelfHosted }
|
||||||
: new string[] { AppResources.US, AppResources.SelfHosted };
|
: new string[] { AppResources.US, AppResources.SelfHosted };
|
||||||
@@ -185,6 +186,7 @@ namespace Bit.App.Pages
|
|||||||
}
|
}
|
||||||
|
|
||||||
await _environmentService.SetUrlsAsync(result == AppResources.EU ? EnvironmentUrlData.DefaultEU : EnvironmentUrlData.DefaultUS);
|
await _environmentService.SetUrlsAsync(result == AppResources.EU ? EnvironmentUrlData.DefaultEU : EnvironmentUrlData.DefaultUS);
|
||||||
|
await _configService.GetAsync(true);
|
||||||
SelectedEnvironmentName = result;
|
SelectedEnvironmentName = result;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -210,6 +212,7 @@ namespace Bit.App.Pages
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
await _configService.GetAsync(true);
|
||||||
SelectedEnvironmentName = AppResources.SelfHosted;
|
SelectedEnvironmentName = AppResources.SelfHosted;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,8 @@
|
|||||||
Priority="-1"
|
Priority="-1"
|
||||||
UseOriginalImage="True"
|
UseOriginalImage="True"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Account}" />
|
AutomationProperties.Name="{u:I18n Account}"
|
||||||
|
AutomationId="AccountIconButton" />
|
||||||
</ContentPage.ToolbarItems>
|
</ContentPage.ToolbarItems>
|
||||||
|
|
||||||
<ContentPage.Resources>
|
<ContentPage.Resources>
|
||||||
@@ -71,7 +72,8 @@
|
|||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
ReturnType="Go"
|
ReturnType="Go"
|
||||||
ReturnCommand="{Binding SubmitCommand}" />
|
ReturnCommand="{Binding SubmitCommand}"
|
||||||
|
AutomationId="PinEntry" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding ShowPasswordIcon}"
|
Text="{Binding ShowPasswordIcon}"
|
||||||
@@ -81,7 +83,8 @@
|
|||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
||||||
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"/>
|
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"
|
||||||
|
AutomationId="PinVisibilityToggle" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid
|
<Grid
|
||||||
x:Name="_passwordGrid"
|
x:Name="_passwordGrid"
|
||||||
@@ -111,7 +114,8 @@
|
|||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
ReturnType="Go"
|
ReturnType="Go"
|
||||||
ReturnCommand="{Binding SubmitCommand}" />
|
ReturnCommand="{Binding SubmitCommand}"
|
||||||
|
AutomationId="MasterPasswordEntry" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding ShowPasswordIcon}"
|
Text="{Binding ShowPasswordIcon}"
|
||||||
@@ -121,7 +125,9 @@
|
|||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
||||||
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}" />
|
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"
|
||||||
|
AutomationId="PasswordVisibilityToggle"
|
||||||
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<StackLayout
|
<StackLayout
|
||||||
StyleClass="box-row"
|
StyleClass="box-row"
|
||||||
@@ -147,7 +153,8 @@
|
|||||||
x:Name="_unlockButton"
|
x:Name="_unlockButton"
|
||||||
Text="{u:I18n Unlock}"
|
Text="{u:I18n Unlock}"
|
||||||
StyleClass="btn-primary"
|
StyleClass="btn-primary"
|
||||||
Clicked="Unlock_Clicked" />
|
Clicked="Unlock_Clicked"
|
||||||
|
AutomationId="UnlockVaultButton" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ namespace Bit.App.Pages
|
|||||||
private readonly WeakEventManager<int?> _secretEntryFocusWeakEventManager = new WeakEventManager<int?>();
|
private readonly WeakEventManager<int?> _secretEntryFocusWeakEventManager = new WeakEventManager<int?>();
|
||||||
private readonly IPolicyService _policyService;
|
private readonly IPolicyService _policyService;
|
||||||
private readonly IPasswordGenerationService _passwordGenerationService;
|
private readonly IPasswordGenerationService _passwordGenerationService;
|
||||||
|
private IDeviceTrustCryptoService _deviceTrustCryptoService;
|
||||||
private string _email;
|
private string _email;
|
||||||
private string _masterPassword;
|
private string _masterPassword;
|
||||||
private string _pin;
|
private string _pin;
|
||||||
@@ -65,6 +65,7 @@ namespace Bit.App.Pages
|
|||||||
_watchDeviceService = ServiceContainer.Resolve<IWatchDeviceService>();
|
_watchDeviceService = ServiceContainer.Resolve<IWatchDeviceService>();
|
||||||
_policyService = ServiceContainer.Resolve<IPolicyService>();
|
_policyService = ServiceContainer.Resolve<IPolicyService>();
|
||||||
_passwordGenerationService = ServiceContainer.Resolve<IPasswordGenerationService>();
|
_passwordGenerationService = ServiceContainer.Resolve<IPasswordGenerationService>();
|
||||||
|
_deviceTrustCryptoService = ServiceContainer.Resolve<IDeviceTrustCryptoService>();
|
||||||
|
|
||||||
PageTitle = AppResources.VerifyMasterPassword;
|
PageTitle = AppResources.VerifyMasterPassword;
|
||||||
TogglePasswordCommand = new Command(TogglePassword);
|
TogglePasswordCommand = new Command(TogglePassword);
|
||||||
@@ -454,6 +455,11 @@ namespace Bit.App.Pages
|
|||||||
{
|
{
|
||||||
await _cryptoService.SetKeyAsync(key);
|
await _cryptoService.SetKeyAsync(key);
|
||||||
}
|
}
|
||||||
|
if (await _deviceTrustCryptoService.GetUserTrustDeviceChoiceForDecryptionAsync())
|
||||||
|
{
|
||||||
|
await _deviceTrustCryptoService.TrustDeviceAsync();
|
||||||
|
await _deviceTrustCryptoService.SetUserTrustDeviceChoiceForDecryptionAsync(false);
|
||||||
|
}
|
||||||
await DoContinueAsync();
|
await DoContinueAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
76
src/App/Pages/Accounts/LoginApproveDevicePage.xaml
Normal file
76
src/App/Pages/Accounts/LoginApproveDevicePage.xaml
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<pages:BaseContentPage
|
||||||
|
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
x:Class="Bit.App.Pages.LoginApproveDevicePage"
|
||||||
|
xmlns:pages="clr-namespace:Bit.App.Pages"
|
||||||
|
xmlns:u="clr-namespace:Bit.App.Utilities"
|
||||||
|
x:DataType="pages:LoginApproveDeviceViewModel"
|
||||||
|
x:Name="_page"
|
||||||
|
Title="{Binding PageTitle}">
|
||||||
|
|
||||||
|
<ContentPage.BindingContext>
|
||||||
|
<pages:LoginApproveDeviceViewModel />
|
||||||
|
</ContentPage.BindingContext>
|
||||||
|
|
||||||
|
<StackLayout Padding="10, 10">
|
||||||
|
<StackLayout Padding="5, 10" Orientation="Horizontal">
|
||||||
|
<StackLayout HorizontalOptions="FillAndExpand">
|
||||||
|
<Label
|
||||||
|
StyleClass="text-md"
|
||||||
|
Text="{u:I18n RememberThisDevice}"/>
|
||||||
|
<Label
|
||||||
|
StyleClass="box-sub-label"
|
||||||
|
Text="{u:I18n TurnOffUsingPublicDevice}"/>
|
||||||
|
</StackLayout>
|
||||||
|
<Switch
|
||||||
|
Scale="0.8"
|
||||||
|
IsToggled="{Binding RememberThisDevice}"
|
||||||
|
VerticalOptions="Center"/>
|
||||||
|
</StackLayout>
|
||||||
|
<StackLayout Margin="0, 20, 0, 0">
|
||||||
|
<Button
|
||||||
|
x:Name="_continue"
|
||||||
|
Text="{u:I18n Continue}"
|
||||||
|
StyleClass="btn-primary"
|
||||||
|
Command="{Binding ContinueCommand}"
|
||||||
|
IsVisible="{Binding ContinueEnabled}"/>
|
||||||
|
<Button
|
||||||
|
x:Name="_approveWithMyOtherDevice"
|
||||||
|
Text="{u:I18n ApproveWithMyOtherDevice}"
|
||||||
|
StyleClass="btn-primary"
|
||||||
|
Command="{Binding ApproveWithMyOtherDeviceCommand}"
|
||||||
|
IsVisible="{Binding ApproveWithMyOtherDeviceEnabled}"/>
|
||||||
|
<Button
|
||||||
|
x:Name="_requestAdminApproval"
|
||||||
|
Text="{u:I18n RequestAdminApproval}"
|
||||||
|
StyleClass="box-button-row"
|
||||||
|
Command="{Binding RequestAdminApprovalCommand}"
|
||||||
|
IsVisible="{Binding RequestAdminApprovalEnabled}"/>
|
||||||
|
<Button
|
||||||
|
x:Name="_approveWithMasterPassword"
|
||||||
|
Text="{u:I18n ApproveWithMasterPassword}"
|
||||||
|
StyleClass="box-button-row"
|
||||||
|
Command="{Binding ApproveWithMasterPasswordCommand}"
|
||||||
|
IsVisible="{Binding ApproveWithMasterPasswordEnabled}"/>
|
||||||
|
<Label
|
||||||
|
Text="{Binding LoggingInAsText}"
|
||||||
|
StyleClass="text-sm"
|
||||||
|
Margin="0,40,0,0"
|
||||||
|
AutomationId="LoggingInAsLabel"
|
||||||
|
/>
|
||||||
|
<Label
|
||||||
|
Text="{u:I18n NotYou}"
|
||||||
|
StyleClass="text-md"
|
||||||
|
HorizontalOptions="Start"
|
||||||
|
TextColor="{DynamicResource HyperlinkColor}"
|
||||||
|
AutomationId="NotYouLabel">
|
||||||
|
<Label.GestureRecognizers>
|
||||||
|
<TapGestureRecognizer Tapped="Cancel_Clicked" />
|
||||||
|
</Label.GestureRecognizers>
|
||||||
|
</Label>
|
||||||
|
</StackLayout>
|
||||||
|
</StackLayout>
|
||||||
|
</pages:BaseContentPage>
|
||||||
|
|
||||||
|
|
||||||
62
src/App/Pages/Accounts/LoginApproveDevicePage.xaml.cs
Normal file
62
src/App/Pages/Accounts/LoginApproveDevicePage.xaml.cs
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Bit.App.Models;
|
||||||
|
using Bit.App.Utilities;
|
||||||
|
using Bit.Core.Enums;
|
||||||
|
using Bit.Core.Utilities;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace Bit.App.Pages
|
||||||
|
{
|
||||||
|
public partial class LoginApproveDevicePage : BaseContentPage
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly LoginApproveDeviceViewModel _vm;
|
||||||
|
private readonly AppOptions _appOptions;
|
||||||
|
|
||||||
|
public LoginApproveDevicePage(AppOptions appOptions = null)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
_vm = BindingContext as LoginApproveDeviceViewModel;
|
||||||
|
_vm.LogInWithMasterPassword = () => StartLogInWithMasterPassword().FireAndForget();
|
||||||
|
_vm.LogInWithDeviceAction = () => StartLoginWithDeviceAsync().FireAndForget();
|
||||||
|
_vm.RequestAdminApprovalAction = () => RequestAdminApprovalAsync().FireAndForget();
|
||||||
|
_vm.CloseAction = () => { Navigation.PopModalAsync(); };
|
||||||
|
_vm.Page = this;
|
||||||
|
_appOptions = appOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnAppearing()
|
||||||
|
{
|
||||||
|
_vm.InitAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Cancel_Clicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (DoOnce())
|
||||||
|
{
|
||||||
|
_vm.CloseAction();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task StartLogInWithMasterPassword()
|
||||||
|
{
|
||||||
|
var page = new LockPage(_appOptions);
|
||||||
|
await Navigation.PushModalAsync(new NavigationPage(page));
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task StartLoginWithDeviceAsync()
|
||||||
|
{
|
||||||
|
var page = new LoginPasswordlessRequestPage(_vm.Email, AuthRequestType.AuthenticateAndUnlock, _appOptions);
|
||||||
|
await Navigation.PushModalAsync(new NavigationPage(page));
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task RequestAdminApprovalAsync()
|
||||||
|
{
|
||||||
|
var page = new LoginPasswordlessRequestPage(_vm.Email, AuthRequestType.AdminApproval, _appOptions);
|
||||||
|
await Navigation.PushModalAsync(new NavigationPage(page));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
140
src/App/Pages/Accounts/LoginApproveDeviceViewModel.cs
Normal file
140
src/App/Pages/Accounts/LoginApproveDeviceViewModel.cs
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using Bit.App.Abstractions;
|
||||||
|
using Bit.App.Resources;
|
||||||
|
using Bit.App.Utilities.AccountManagement;
|
||||||
|
using Bit.Core.Abstractions;
|
||||||
|
using Bit.Core.Enums;
|
||||||
|
using Bit.Core.Models.Request;
|
||||||
|
using Bit.Core.Services;
|
||||||
|
using Bit.Core.Utilities;
|
||||||
|
using Xamarin.CommunityToolkit.ObjectModel;
|
||||||
|
using Xamarin.Essentials;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace Bit.App.Pages
|
||||||
|
{
|
||||||
|
public class LoginApproveDeviceViewModel : BaseViewModel
|
||||||
|
{
|
||||||
|
private bool _rememberThisDevice;
|
||||||
|
private bool _approveWithMyOtherDeviceEnabled;
|
||||||
|
private bool _requestAdminApprovalEnabled;
|
||||||
|
private bool _approveWithMasterPasswordEnabled;
|
||||||
|
private bool _continueEnabled;
|
||||||
|
private string _email;
|
||||||
|
private readonly IStateService _stateService;
|
||||||
|
private readonly IApiService _apiService;
|
||||||
|
private IDeviceTrustCryptoService _deviceTrustCryptoService;
|
||||||
|
|
||||||
|
public ICommand ApproveWithMyOtherDeviceCommand { get; }
|
||||||
|
public ICommand RequestAdminApprovalCommand { get; }
|
||||||
|
public ICommand ApproveWithMasterPasswordCommand { get; }
|
||||||
|
public ICommand ContinueCommand { get; }
|
||||||
|
|
||||||
|
public Action LogInWithMasterPassword { get; set; }
|
||||||
|
public Action LogInWithDeviceAction { get; set; }
|
||||||
|
public Action RequestAdminApprovalAction { get; set; }
|
||||||
|
public Action CloseAction { get; set; }
|
||||||
|
|
||||||
|
public LoginApproveDeviceViewModel()
|
||||||
|
{
|
||||||
|
_stateService = ServiceContainer.Resolve<IStateService>();
|
||||||
|
_apiService = ServiceContainer.Resolve<IApiService>();
|
||||||
|
_deviceTrustCryptoService = ServiceContainer.Resolve<IDeviceTrustCryptoService>();
|
||||||
|
|
||||||
|
PageTitle = AppResources.LoggedIn;
|
||||||
|
|
||||||
|
ApproveWithMyOtherDeviceCommand = new AsyncCommand(() => CheckDeviceTrustAndInvoke(LogInWithDeviceAction),
|
||||||
|
onException: ex => HandleException(ex),
|
||||||
|
allowsMultipleExecutions: false);
|
||||||
|
|
||||||
|
RequestAdminApprovalCommand = new AsyncCommand(() => CheckDeviceTrustAndInvoke(RequestAdminApprovalAction),
|
||||||
|
onException: ex => HandleException(ex),
|
||||||
|
allowsMultipleExecutions: false);
|
||||||
|
|
||||||
|
ApproveWithMasterPasswordCommand = new AsyncCommand(() => CheckDeviceTrustAndInvoke(LogInWithMasterPassword),
|
||||||
|
onException: ex => HandleException(ex),
|
||||||
|
allowsMultipleExecutions: false);
|
||||||
|
|
||||||
|
ContinueCommand = new AsyncCommand(InitAsync,
|
||||||
|
onException: ex => HandleException(ex),
|
||||||
|
allowsMultipleExecutions: false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string LoggingInAsText => string.Format(AppResources.LoggingInAsX, Email);
|
||||||
|
|
||||||
|
public bool RememberThisDevice
|
||||||
|
{
|
||||||
|
get => _rememberThisDevice;
|
||||||
|
set => SetProperty(ref _rememberThisDevice, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ApproveWithMyOtherDeviceEnabled
|
||||||
|
{
|
||||||
|
get => _approveWithMyOtherDeviceEnabled;
|
||||||
|
set => SetProperty(ref _approveWithMyOtherDeviceEnabled, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool RequestAdminApprovalEnabled
|
||||||
|
{
|
||||||
|
get => _requestAdminApprovalEnabled;
|
||||||
|
set => SetProperty(ref _requestAdminApprovalEnabled, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ApproveWithMasterPasswordEnabled
|
||||||
|
{
|
||||||
|
get => _approveWithMasterPasswordEnabled;
|
||||||
|
set => SetProperty(ref _approveWithMasterPasswordEnabled, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ContinueEnabled
|
||||||
|
{
|
||||||
|
get => _continueEnabled;
|
||||||
|
set => SetProperty(ref _continueEnabled, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Email
|
||||||
|
{
|
||||||
|
get => _email;
|
||||||
|
set => SetProperty(ref _email, value, additionalPropertyNames:
|
||||||
|
new string[] {
|
||||||
|
nameof(LoggingInAsText)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task InitAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Email = await _stateService.GetRememberedEmailAsync();
|
||||||
|
var decryptOptions = await _stateService.GetAccountDecryptionOptions();
|
||||||
|
RequestAdminApprovalEnabled = decryptOptions != null && decryptOptions.TrustedDeviceOption != null && decryptOptions.TrustedDeviceOption.HasAdminApproval;
|
||||||
|
ApproveWithMasterPasswordEnabled = decryptOptions != null && decryptOptions.HasMasterPassword;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
HandleException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ApproveWithMyOtherDeviceEnabled = await _apiService.GetDevicesExistenceByTypes(DeviceTypeExtensions.GetDesktopAndMobileTypes().ToArray());
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
HandleException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Change this expression to, Appear if the browser is trusted and shared the key with the app
|
||||||
|
ContinueEnabled = !RequestAdminApprovalEnabled && !ApproveWithMasterPasswordEnabled && !ApproveWithMyOtherDeviceEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task CheckDeviceTrustAndInvoke(Action action)
|
||||||
|
{
|
||||||
|
await _deviceTrustCryptoService.SetUserTrustDeviceChoiceForDecryptionAsync(RememberThisDevice);
|
||||||
|
await Device.InvokeOnMainThreadAsync(action);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -9,23 +9,23 @@
|
|||||||
xmlns:u="clr-namespace:Bit.App.Utilities"
|
xmlns:u="clr-namespace:Bit.App.Utilities"
|
||||||
x:DataType="pages:LoginPageViewModel"
|
x:DataType="pages:LoginPageViewModel"
|
||||||
x:Name="_page"
|
x:Name="_page"
|
||||||
Title="{Binding PageTitle}">
|
Title="{Binding PageTitle}"
|
||||||
|
AutomationId="PageTitleLabel">
|
||||||
|
|
||||||
<ContentPage.BindingContext>
|
<ContentPage.BindingContext>
|
||||||
<pages:LoginPageViewModel />
|
<pages:LoginPageViewModel />
|
||||||
</ContentPage.BindingContext>
|
</ContentPage.BindingContext>
|
||||||
|
|
||||||
<ContentPage.ToolbarItems>
|
<ContentPage.ToolbarItems>
|
||||||
<controls:ExtendedToolbarItem
|
<controls:ExtendedToolbarItem
|
||||||
x:Name="_accountAvatar"
|
x:Name="_accountAvatar"
|
||||||
x:Key="accountAvatar"
|
|
||||||
IconImageSource="{Binding AvatarImageSource}"
|
IconImageSource="{Binding AvatarImageSource}"
|
||||||
Command="{Binding Source={x:Reference _accountListOverlay}, Path=ToggleVisibililtyCommand}"
|
Command="{Binding Source={x:Reference _accountListOverlay}, Path=ToggleVisibililtyCommand}"
|
||||||
Order="Primary"
|
Order="Primary"
|
||||||
Priority="-1"
|
Priority="-1"
|
||||||
UseOriginalImage="True"
|
UseOriginalImage="True"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Account}" />
|
AutomationProperties.Name="{u:I18n Account}"
|
||||||
|
AutomationId="AccountIconButton" />
|
||||||
</ContentPage.ToolbarItems>
|
</ContentPage.ToolbarItems>
|
||||||
|
|
||||||
<ContentPage.Resources>
|
<ContentPage.Resources>
|
||||||
@@ -34,7 +34,8 @@
|
|||||||
<ToolbarItem Icon="more_vert.png" Clicked="More_Clicked" Order="Primary"
|
<ToolbarItem Icon="more_vert.png" Clicked="More_Clicked" Order="Primary"
|
||||||
x:Name="_moreItem" x:Key="moreItem"
|
x:Name="_moreItem" x:Key="moreItem"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Options}" />
|
AutomationProperties.Name="{u:I18n Options}"
|
||||||
|
AutomationId="OptionsButton" />
|
||||||
<ToolbarItem Text="{u:I18n GetPasswordHint}"
|
<ToolbarItem Text="{u:I18n GetPasswordHint}"
|
||||||
x:Key="getPasswordHint"
|
x:Key="getPasswordHint"
|
||||||
x:Name="_getPasswordHint"
|
x:Name="_getPasswordHint"
|
||||||
@@ -75,7 +76,9 @@
|
|||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
ReturnType="Go"
|
ReturnType="Go"
|
||||||
ReturnCommand="{Binding LogInCommand}" />
|
ReturnCommand="{Binding LogInCommand}"
|
||||||
|
AutomationId="MasterPasswordEntry"
|
||||||
|
/>
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding ShowPasswordIcon}"
|
Text="{Binding ShowPasswordIcon}"
|
||||||
@@ -84,6 +87,7 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="1"
|
Grid.RowSpan="1"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationId="PasswordVisibilityToggle"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
||||||
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"/>
|
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"/>
|
||||||
<Label
|
<Label
|
||||||
@@ -93,7 +97,9 @@
|
|||||||
Padding="0,5,0,0"
|
Padding="0,5,0,0"
|
||||||
Grid.Row="2"
|
Grid.Row="2"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Grid.ColumnSpan="2">
|
Grid.ColumnSpan="2"
|
||||||
|
AutomationId="GetMasterPasswordHintLabel"
|
||||||
|
>
|
||||||
<Label.GestureRecognizers>
|
<Label.GestureRecognizers>
|
||||||
<TapGestureRecognizer Tapped="Hint_Clicked" />
|
<TapGestureRecognizer Tapped="Hint_Clicked" />
|
||||||
</Label.GestureRecognizers>
|
</Label.GestureRecognizers>
|
||||||
@@ -104,19 +110,24 @@
|
|||||||
<Button x:Name="_loginWithMasterPassword"
|
<Button x:Name="_loginWithMasterPassword"
|
||||||
Text="{u:I18n LogInWithMasterPassword}"
|
Text="{u:I18n LogInWithMasterPassword}"
|
||||||
StyleClass="btn-primary"
|
StyleClass="btn-primary"
|
||||||
Clicked="LogIn_Clicked" />
|
Clicked="LogIn_Clicked"
|
||||||
|
AutomationId="LogInWithMasterPasswordButton"
|
||||||
|
/>
|
||||||
<controls:IconLabelButton
|
<controls:IconLabelButton
|
||||||
HorizontalOptions="Fill"
|
HorizontalOptions="Fill"
|
||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
Icon="{Binding Source={x:Static core:BitwardenIcons.Device}}"
|
Icon="{Binding Source={x:Static core:BitwardenIcons.Device}}"
|
||||||
Label="{u:I18n LogInWithAnotherDevice}"
|
Label="{u:I18n LogInWithAnotherDevice}"
|
||||||
ButtonCommand="{Binding LogInWithDeviceCommand}"
|
ButtonCommand="{Binding LogInWithDeviceCommand}"
|
||||||
IsVisible="{Binding IsKnownDevice}"/>
|
IsVisible="{Binding IsKnownDevice}"
|
||||||
|
AutomationId="LogInWithAnotherDeviceButton"
|
||||||
|
/>
|
||||||
<controls:IconLabelButton
|
<controls:IconLabelButton
|
||||||
HorizontalOptions="Fill"
|
HorizontalOptions="Fill"
|
||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
Icon="{Binding Source={x:Static core:BitwardenIcons.Suitcase}}"
|
Icon="{Binding Source={x:Static core:BitwardenIcons.Suitcase}}"
|
||||||
Label="{u:I18n LogInSso}">
|
Label="{u:I18n LogInSso}"
|
||||||
|
AutomationId="LogInWithSsoButton">
|
||||||
<controls:IconLabelButton.GestureRecognizers>
|
<controls:IconLabelButton.GestureRecognizers>
|
||||||
<TapGestureRecognizer Tapped="LogInSSO_Clicked" />
|
<TapGestureRecognizer Tapped="LogInSSO_Clicked" />
|
||||||
</controls:IconLabelButton.GestureRecognizers>
|
</controls:IconLabelButton.GestureRecognizers>
|
||||||
@@ -124,12 +135,15 @@
|
|||||||
<Label
|
<Label
|
||||||
Text="{Binding LoggingInAsText}"
|
Text="{Binding LoggingInAsText}"
|
||||||
StyleClass="text-sm"
|
StyleClass="text-sm"
|
||||||
Margin="0,40,0,0"/>
|
Margin="0,40,0,0"
|
||||||
|
AutomationId="LoggingInAsLabel"
|
||||||
|
/>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n NotYou}"
|
Text="{u:I18n NotYou}"
|
||||||
StyleClass="text-md"
|
StyleClass="text-md"
|
||||||
HorizontalOptions="Start"
|
HorizontalOptions="Start"
|
||||||
TextColor="{DynamicResource HyperlinkColor}">
|
TextColor="{DynamicResource HyperlinkColor}"
|
||||||
|
AutomationId="NotYouLabel">
|
||||||
<Label.GestureRecognizers>
|
<Label.GestureRecognizers>
|
||||||
<TapGestureRecognizer Tapped="Cancel_Clicked" />
|
<TapGestureRecognizer Tapped="Cancel_Clicked" />
|
||||||
</Label.GestureRecognizers>
|
</Label.GestureRecognizers>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using Bit.App.Models;
|
|||||||
using Bit.App.Utilities;
|
using Bit.App.Utilities;
|
||||||
using Bit.Core;
|
using Bit.Core;
|
||||||
using Bit.Core.Abstractions;
|
using Bit.Core.Abstractions;
|
||||||
|
using Bit.Core.Enums;
|
||||||
using Bit.Core.Services;
|
using Bit.Core.Services;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
using Xamarin.CommunityToolkit.ObjectModel;
|
using Xamarin.CommunityToolkit.ObjectModel;
|
||||||
@@ -135,7 +136,7 @@ namespace Bit.App.Pages
|
|||||||
|
|
||||||
private async Task StartLoginWithDeviceAsync()
|
private async Task StartLoginWithDeviceAsync()
|
||||||
{
|
{
|
||||||
var page = new LoginPasswordlessRequestPage(_vm.Email, _appOptions);
|
var page = new LoginPasswordlessRequestPage(_vm.Email, AuthRequestType.AuthenticateAndUnlock, _appOptions);
|
||||||
await Navigation.PushModalAsync(new NavigationPage(page));
|
await Navigation.PushModalAsync(new NavigationPage(page));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,8 @@
|
|||||||
<Label
|
<Label
|
||||||
Text="{Binding LogInAttemptByLabel}"
|
Text="{Binding LogInAttemptByLabel}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
Margin="0,0,0,24"/>
|
Margin="0,0,0,24"
|
||||||
|
AutomationId="LogInAttemptByLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n FingerprintPhrase}"
|
Text="{u:I18n FingerprintPhrase}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
@@ -41,7 +42,8 @@
|
|||||||
FormattedText="{Binding LoginRequest.FingerprintPhrase}"
|
FormattedText="{Binding LoginRequest.FingerprintPhrase}"
|
||||||
FontSize="Medium"
|
FontSize="Medium"
|
||||||
TextColor="{DynamicResource FingerprintPhrase}"
|
TextColor="{DynamicResource FingerprintPhrase}"
|
||||||
Margin="0,0,0,27"/>
|
Margin="0,0,0,27"
|
||||||
|
AutomationId="FingerprintValueLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n DeviceType}"
|
Text="{u:I18n DeviceType}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
@@ -49,7 +51,8 @@
|
|||||||
<Label
|
<Label
|
||||||
Text="{Binding LoginRequest.DeviceType}"
|
Text="{Binding LoginRequest.DeviceType}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
Margin="0,0,0,21"/>
|
Margin="0,0,0,21"
|
||||||
|
AutomationId="DeviceTypeValueLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n IpAddress}"
|
Text="{u:I18n IpAddress}"
|
||||||
IsVisible="{Binding ShowIpAddress}"
|
IsVisible="{Binding ShowIpAddress}"
|
||||||
@@ -59,7 +62,8 @@
|
|||||||
Text="{Binding LoginRequest.IpAddress}"
|
Text="{Binding LoginRequest.IpAddress}"
|
||||||
IsVisible="{Binding ShowIpAddress}"
|
IsVisible="{Binding ShowIpAddress}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
Margin="0,0,0,21"/>
|
Margin="0,0,0,21"
|
||||||
|
AutomationId="IpAddressValueLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n Time}"
|
Text="{u:I18n Time}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
@@ -67,7 +71,8 @@
|
|||||||
<Label
|
<Label
|
||||||
Text="{Binding TimeOfRequestText}"
|
Text="{Binding TimeOfRequestText}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
Margin="0,0,0,57"/>
|
Margin="0,0,0,57"
|
||||||
|
AutomationId="TimeOfRequestValueLabel" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|
||||||
@@ -75,11 +80,13 @@
|
|||||||
Text="{u:I18n ConfirmLogIn}"
|
Text="{u:I18n ConfirmLogIn}"
|
||||||
Command="{Binding AcceptRequestCommand}"
|
Command="{Binding AcceptRequestCommand}"
|
||||||
Margin="0,0,0,17"
|
Margin="0,0,0,17"
|
||||||
StyleClass="btn-primary"/>
|
StyleClass="btn-primary"
|
||||||
|
AutomationId="ConfirmLoginButton" />
|
||||||
<Button
|
<Button
|
||||||
Text="{u:I18n DenyLogIn}"
|
Text="{u:I18n DenyLogIn}"
|
||||||
Command="{Binding RejectRequestCommand}"
|
Command="{Binding RejectRequestCommand}"
|
||||||
StyleClass="btn-secundary"/>
|
StyleClass="btn-secundary"
|
||||||
|
AutomationId="DenyLoginButton" />
|
||||||
|
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</pages:BaseContentPage>
|
</pages:BaseContentPage>
|
||||||
|
|||||||
@@ -21,16 +21,17 @@
|
|||||||
<StackLayout
|
<StackLayout
|
||||||
Padding="7, 0, 7, 20">
|
Padding="7, 0, 7, 20">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n LogInInitiated}"
|
Text="{Binding Tittle}"
|
||||||
FontSize="Title"
|
FontSize="Title"
|
||||||
FontAttributes="Bold"
|
FontAttributes="Bold"
|
||||||
Margin="0,14,0,21"/>
|
Margin="0,14,0,21"
|
||||||
|
AutomationId="LogInInitiatedLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n ANotificationHasBeenSentToYourDevice}"
|
Text="{Binding SubTittle}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
Margin="0,0,0,10"/>
|
Margin="0,0,0,10"/>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice}"
|
Text="{Binding Description}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
Margin="0,0,0,24"/>
|
Margin="0,0,0,24"/>
|
||||||
<Label
|
<Label
|
||||||
@@ -40,13 +41,16 @@
|
|||||||
<controls:MonoLabel
|
<controls:MonoLabel
|
||||||
FormattedText="{Binding FingerprintPhrase}"
|
FormattedText="{Binding FingerprintPhrase}"
|
||||||
FontSize="Medium"
|
FontSize="Medium"
|
||||||
TextColor="{DynamicResource FingerprintPhrase}"/>
|
TextColor="{DynamicResource FingerprintPhrase}"
|
||||||
|
AutomationId="FingerprintPhraseValue" />
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n ResendNotification}"
|
Text="{u:I18n ResendNotification}"
|
||||||
|
IsVisible="{Binding ResendNotificationVisible}"
|
||||||
StyleClass="text-md"
|
StyleClass="text-md"
|
||||||
HorizontalOptions="Start"
|
HorizontalOptions="Start"
|
||||||
Margin="0,40,0,0"
|
Margin="0,40,0,0"
|
||||||
TextColor="{DynamicResource HyperlinkColor}">
|
TextColor="{DynamicResource HyperlinkColor}"
|
||||||
|
AutomationId="ResendNotificationButton">
|
||||||
<Label.GestureRecognizers>
|
<Label.GestureRecognizers>
|
||||||
<TapGestureRecognizer Command="{Binding CreatePasswordlessLoginCommand}" />
|
<TapGestureRecognizer Command="{Binding CreatePasswordlessLoginCommand}" />
|
||||||
</Label.GestureRecognizers>
|
</Label.GestureRecognizers>
|
||||||
@@ -55,7 +59,7 @@
|
|||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
Margin="0,30,0,0">
|
Margin="0,30,0,0">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n NeedAnotherOption}"
|
Text="{Binding OtherOptions}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
VerticalTextAlignment="End"/>
|
VerticalTextAlignment="End"/>
|
||||||
<Label
|
<Label
|
||||||
@@ -64,7 +68,8 @@
|
|||||||
VerticalTextAlignment="End"
|
VerticalTextAlignment="End"
|
||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
Margin="5, 0"
|
Margin="5, 0"
|
||||||
TextColor="{DynamicResource HyperlinkColor}">
|
TextColor="{DynamicResource HyperlinkColor}"
|
||||||
|
AutomationId="ViewAllLoginOptionsButton">
|
||||||
<Label.GestureRecognizers>
|
<Label.GestureRecognizers>
|
||||||
<TapGestureRecognizer Command="{Binding CloseCommand}" />
|
<TapGestureRecognizer Command="{Binding CloseCommand}" />
|
||||||
</Label.GestureRecognizers>
|
</Label.GestureRecognizers>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Bit.App.Models;
|
using Bit.App.Models;
|
||||||
using Bit.App.Utilities;
|
using Bit.App.Utilities;
|
||||||
|
using Bit.Core.Enums;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
@@ -12,13 +13,14 @@ namespace Bit.App.Pages
|
|||||||
private LoginPasswordlessRequestViewModel _vm;
|
private LoginPasswordlessRequestViewModel _vm;
|
||||||
private readonly AppOptions _appOptions;
|
private readonly AppOptions _appOptions;
|
||||||
|
|
||||||
public LoginPasswordlessRequestPage(string email, AppOptions appOptions = null)
|
public LoginPasswordlessRequestPage(string email, AuthRequestType authRequestType, AppOptions appOptions = null)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
_appOptions = appOptions;
|
_appOptions = appOptions;
|
||||||
_vm = BindingContext as LoginPasswordlessRequestViewModel;
|
_vm = BindingContext as LoginPasswordlessRequestViewModel;
|
||||||
_vm.Page = this;
|
_vm.Page = this;
|
||||||
_vm.Email = email;
|
_vm.Email = email;
|
||||||
|
_vm.AuthRequestType = authRequestType;
|
||||||
_vm.StartTwoFactorAction = () => Device.BeginInvokeOnMainThread(async () => await StartTwoFactorAsync());
|
_vm.StartTwoFactorAction = () => Device.BeginInvokeOnMainThread(async () => await StartTwoFactorAsync());
|
||||||
_vm.LogInSuccessAction = () => Device.BeginInvokeOnMainThread(async () => await LogInSuccessAsync());
|
_vm.LogInSuccessAction = () => Device.BeginInvokeOnMainThread(async () => await LogInSuccessAsync());
|
||||||
_vm.UpdateTempPasswordAction = () => Device.BeginInvokeOnMainThread(async () => await UpdateTempPasswordAsync());
|
_vm.UpdateTempPasswordAction = () => Device.BeginInvokeOnMainThread(async () => await UpdateTempPasswordAsync());
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net.Http;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@@ -32,6 +33,7 @@ namespace Bit.App.Pages
|
|||||||
private IPlatformUtilsService _platformUtilsService;
|
private IPlatformUtilsService _platformUtilsService;
|
||||||
private IEnvironmentService _environmentService;
|
private IEnvironmentService _environmentService;
|
||||||
private ILogger _logger;
|
private ILogger _logger;
|
||||||
|
private IDeviceTrustCryptoService _deviceTrustCryptoService;
|
||||||
|
|
||||||
protected override II18nService i18nService => _i18nService;
|
protected override II18nService i18nService => _i18nService;
|
||||||
protected override IEnvironmentService environmentService => _environmentService;
|
protected override IEnvironmentService environmentService => _environmentService;
|
||||||
@@ -44,6 +46,7 @@ namespace Bit.App.Pages
|
|||||||
private string _email;
|
private string _email;
|
||||||
private string _requestId;
|
private string _requestId;
|
||||||
private string _requestAccessCode;
|
private string _requestAccessCode;
|
||||||
|
private AuthRequestType _authRequestType;
|
||||||
// Item1 publicKey, Item2 privateKey
|
// Item1 publicKey, Item2 privateKey
|
||||||
private Tuple<byte[], byte[]> _requestKeyPair;
|
private Tuple<byte[], byte[]> _requestKeyPair;
|
||||||
|
|
||||||
@@ -57,6 +60,7 @@ namespace Bit.App.Pages
|
|||||||
_i18nService = ServiceContainer.Resolve<II18nService>();
|
_i18nService = ServiceContainer.Resolve<II18nService>();
|
||||||
_stateService = ServiceContainer.Resolve<IStateService>();
|
_stateService = ServiceContainer.Resolve<IStateService>();
|
||||||
_logger = ServiceContainer.Resolve<ILogger>();
|
_logger = ServiceContainer.Resolve<ILogger>();
|
||||||
|
_deviceTrustCryptoService = ServiceContainer.Resolve<IDeviceTrustCryptoService>();
|
||||||
|
|
||||||
PageTitle = AppResources.LogInWithAnotherDevice;
|
PageTitle = AppResources.LogInWithAnotherDevice;
|
||||||
|
|
||||||
@@ -77,6 +81,70 @@ namespace Bit.App.Pages
|
|||||||
public ICommand CreatePasswordlessLoginCommand { get; }
|
public ICommand CreatePasswordlessLoginCommand { get; }
|
||||||
public ICommand CloseCommand { get; }
|
public ICommand CloseCommand { get; }
|
||||||
|
|
||||||
|
public string Tittle
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
switch (_authRequestType)
|
||||||
|
{
|
||||||
|
case AuthRequestType.AuthenticateAndUnlock:
|
||||||
|
return AppResources.LogInInitiated;
|
||||||
|
case AuthRequestType.AdminApproval:
|
||||||
|
return AppResources.AdminApprovalRequested;
|
||||||
|
default:
|
||||||
|
return string.Empty;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string SubTittle
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
switch (_authRequestType)
|
||||||
|
{
|
||||||
|
case AuthRequestType.AuthenticateAndUnlock:
|
||||||
|
return AppResources.ANotificationHasBeenSentToYourDevice;
|
||||||
|
case AuthRequestType.AdminApproval:
|
||||||
|
return AppResources.YourRequestHasBeenSentToYourAdmin;
|
||||||
|
default:
|
||||||
|
return string.Empty;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Description
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
switch (_authRequestType)
|
||||||
|
{
|
||||||
|
case AuthRequestType.AuthenticateAndUnlock:
|
||||||
|
return AppResources.PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice;
|
||||||
|
case AuthRequestType.AdminApproval:
|
||||||
|
return AppResources.YouWillBeNotifiedOnceApproved;
|
||||||
|
default:
|
||||||
|
return string.Empty;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string OtherOptions
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
switch (_authRequestType)
|
||||||
|
{
|
||||||
|
case AuthRequestType.AuthenticateAndUnlock:
|
||||||
|
return AppResources.NeedAnotherOption;
|
||||||
|
case AuthRequestType.AdminApproval:
|
||||||
|
return AppResources.TroubleLoggingIn;
|
||||||
|
default:
|
||||||
|
return string.Empty;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public string FingerprintPhrase
|
public string FingerprintPhrase
|
||||||
{
|
{
|
||||||
get => _fingerprintPhrase;
|
get => _fingerprintPhrase;
|
||||||
@@ -89,6 +157,21 @@ namespace Bit.App.Pages
|
|||||||
set => SetProperty(ref _email, value);
|
set => SetProperty(ref _email, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AuthRequestType AuthRequestType
|
||||||
|
{
|
||||||
|
get => _authRequestType;
|
||||||
|
set => SetProperty(ref _authRequestType, value, additionalPropertyNames: new string[]
|
||||||
|
{
|
||||||
|
nameof(Tittle),
|
||||||
|
nameof(SubTittle),
|
||||||
|
nameof(Description),
|
||||||
|
nameof(OtherOptions),
|
||||||
|
nameof(ResendNotificationVisible)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ResendNotificationVisible => AuthRequestType == AuthRequestType.AuthenticateAndUnlock;
|
||||||
|
|
||||||
public void StartCheckLoginRequestStatus()
|
public void StartCheckLoginRequestStatus()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -154,6 +237,11 @@ namespace Bit.App.Pages
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
_syncService.FullSyncAsync(true).FireAndForget();
|
_syncService.FullSyncAsync(true).FireAndForget();
|
||||||
|
if (await _deviceTrustCryptoService.GetUserTrustDeviceChoiceForDecryptionAsync())
|
||||||
|
{
|
||||||
|
await _deviceTrustCryptoService.TrustDeviceAsync();
|
||||||
|
await _deviceTrustCryptoService.SetUserTrustDeviceChoiceForDecryptionAsync(false);
|
||||||
|
}
|
||||||
LogInSuccessAction?.Invoke();
|
LogInSuccessAction?.Invoke();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -168,7 +256,7 @@ namespace Bit.App.Pages
|
|||||||
{
|
{
|
||||||
await Device.InvokeOnMainThreadAsync(() => _deviceActionService.ShowLoadingAsync(AppResources.Loading));
|
await Device.InvokeOnMainThreadAsync(() => _deviceActionService.ShowLoadingAsync(AppResources.Loading));
|
||||||
|
|
||||||
var response = await _authService.PasswordlessCreateLoginRequestAsync(_email);
|
var response = await _authService.PasswordlessCreateLoginRequestAsync(_email, AuthRequestType);
|
||||||
if (response != null)
|
if (response != null)
|
||||||
{
|
{
|
||||||
FingerprintPhrase = response.FingerprintPhrase;
|
FingerprintPhrase = response.FingerprintPhrase;
|
||||||
|
|||||||
@@ -110,6 +110,11 @@ namespace Bit.App.Pages
|
|||||||
{
|
{
|
||||||
RestoreAppOptionsFromCopy();
|
RestoreAppOptionsFromCopy();
|
||||||
await AppHelpers.ClearPreviousPage();
|
await AppHelpers.ClearPreviousPage();
|
||||||
|
|
||||||
|
// Just for testing the screen
|
||||||
|
Application.Current.MainPage = new NavigationPage(new LoginApproveDevicePage(_appOptions));
|
||||||
|
return;
|
||||||
|
|
||||||
if (await _vaultTimeoutService.IsLockedAsync())
|
if (await _vaultTimeoutService.IsLockedAsync())
|
||||||
{
|
{
|
||||||
Application.Current.MainPage = new NavigationPage(new LockPage(_appOptions));
|
Application.Current.MainPage = new NavigationPage(new LockPage(_appOptions));
|
||||||
|
|||||||
@@ -35,7 +35,8 @@
|
|||||||
x:Name="_email"
|
x:Name="_email"
|
||||||
Text="{Binding Email}"
|
Text="{Binding Email}"
|
||||||
Keyboard="Email"
|
Keyboard="Email"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="EmailAddressEntry"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Grid StyleClass="box-row">
|
<Grid StyleClass="box-row">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
@@ -59,7 +60,8 @@
|
|||||||
IsTextPredictionEnabled="False"
|
IsTextPredictionEnabled="False"
|
||||||
IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}"
|
IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="MasterPasswordEntry"/>
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding ShowPasswordIcon}"
|
Text="{Binding ShowPasswordIcon}"
|
||||||
@@ -69,7 +71,8 @@
|
|||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
||||||
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"/>
|
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"
|
||||||
|
AutomationId="PasswordVisibilityToggle"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Label
|
<Label
|
||||||
StyleClass="box-sub-label"
|
StyleClass="box-sub-label"
|
||||||
@@ -109,7 +112,8 @@
|
|||||||
IsTextPredictionEnabled="False"
|
IsTextPredictionEnabled="False"
|
||||||
IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}"
|
IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="ConfirmMasterPasswordEntry"/>
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding ShowPasswordIcon}"
|
Text="{Binding ShowPasswordIcon}"
|
||||||
@@ -118,6 +122,7 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationId="ConfirmPasswordVisibilityToggle"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
||||||
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}" />
|
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -130,7 +135,8 @@
|
|||||||
Text="{Binding Hint}"
|
Text="{Binding Hint}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
ReturnType="Go"
|
ReturnType="Go"
|
||||||
ReturnCommand="{Binding SubmitCommand}" />
|
ReturnCommand="{Binding SubmitCommand}"
|
||||||
|
AutomationId="MasterPasswordHintLabel" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n MasterPasswordHintDescription}"
|
Text="{u:I18n MasterPasswordHintDescription}"
|
||||||
@@ -142,7 +148,8 @@
|
|||||||
IsToggled="{Binding CheckExposedMasterPassword}"
|
IsToggled="{Binding CheckExposedMasterPassword}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="Start"
|
HorizontalOptions="Start"
|
||||||
Margin="0, 0, 10, 0"/>
|
Margin="0, 0, 10, 0"
|
||||||
|
AutomationId="CheckExposedMasterPasswordToggle"/>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n CheckKnownDataBreachesForThisPassword}"
|
Text="{u:I18n CheckKnownDataBreachesForThisPassword}"
|
||||||
StyleClass="box-footer-label"
|
StyleClass="box-footer-label"
|
||||||
@@ -154,7 +161,8 @@
|
|||||||
IsToggled="{Binding AcceptPolicies}"
|
IsToggled="{Binding AcceptPolicies}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="Start"
|
HorizontalOptions="Start"
|
||||||
Margin="0, 0, 10, 0"/>
|
Margin="0, 0, 10, 0"
|
||||||
|
AutomationId="AcceptPoliciesToggle"/>
|
||||||
<Label StyleClass="box-footer-label"
|
<Label StyleClass="box-footer-label"
|
||||||
HorizontalOptions="Fill">
|
HorizontalOptions="Fill">
|
||||||
<Label.FormattedText>
|
<Label.FormattedText>
|
||||||
|
|||||||
@@ -27,7 +27,8 @@
|
|||||||
Clicked="Clear_Clicked"
|
Clicked="Clear_Clicked"
|
||||||
Order="Secondary"
|
Order="Secondary"
|
||||||
x:Name="_clearItem"
|
x:Name="_clearItem"
|
||||||
x:Key="clearItem" />
|
x:Key="clearItem"
|
||||||
|
AutomationId="ClearPasswordList" />
|
||||||
<ToolbarItem Icon="more_vert.png"
|
<ToolbarItem Icon="more_vert.png"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Options}"
|
AutomationProperties.Name="{u:I18n Options}"
|
||||||
@@ -43,7 +44,8 @@
|
|||||||
Margin="20, 0"
|
Margin="20, 0"
|
||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
HorizontalOptions="CenterAndExpand"
|
HorizontalOptions="CenterAndExpand"
|
||||||
HorizontalTextAlignment="Center"></Label>
|
HorizontalTextAlignment="Center"
|
||||||
|
AutomationId="NoPasswordsDisplayedLabel"></Label>
|
||||||
<controls:ExtendedCollectionView
|
<controls:ExtendedCollectionView
|
||||||
IsVisible="{Binding ShowNoData, Converter={StaticResource inverseBool}}"
|
IsVisible="{Binding ShowNoData, Converter={StaticResource inverseBool}}"
|
||||||
ItemsSource="{Binding History}"
|
ItemsSource="{Binding History}"
|
||||||
@@ -56,7 +58,8 @@
|
|||||||
StyleClass="list-row, list-row-platform"
|
StyleClass="list-row, list-row-platform"
|
||||||
Padding="10"
|
Padding="10"
|
||||||
RowSpacing="0"
|
RowSpacing="0"
|
||||||
ColumnSpacing="10">
|
ColumnSpacing="10"
|
||||||
|
AutomationId="GeneratedPasswordRow">
|
||||||
|
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
@@ -71,12 +74,14 @@
|
|||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
StyleClass="list-title, list-title-platform, text-html"
|
StyleClass="list-title, list-title-platform, text-html"
|
||||||
Text="{Binding Password, Mode=OneWay, Converter={StaticResource coloredPassword}}" />
|
Text="{Binding Password, Mode=OneWay, Converter={StaticResource coloredPassword}}"
|
||||||
|
AutomationId="GeneratedPasswordValue" />
|
||||||
<Label LineBreakMode="TailTruncation"
|
<Label LineBreakMode="TailTruncation"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
StyleClass="list-subtitle, list-subtitle-platform"
|
StyleClass="list-subtitle, list-subtitle-platform"
|
||||||
Text="{Binding Date, Mode=OneWay, Converter={StaticResource dateTime}}" />
|
Text="{Binding Date, Mode=OneWay, Converter={StaticResource dateTime}}"
|
||||||
|
AutomationId="GeneratedPasswordDateLabel" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="list-row-button, list-row-button-platform"
|
StyleClass="list-row-button, list-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Paste}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Paste}}"
|
||||||
@@ -86,7 +91,8 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n CopyPassword}" />
|
AutomationProperties.Name="{u:I18n CopyPassword}"
|
||||||
|
AutomationId="CopyPasswordValueButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</CollectionView.ItemTemplate>
|
</CollectionView.ItemTemplate>
|
||||||
|
|||||||
@@ -71,7 +71,8 @@
|
|||||||
<Label
|
<Label
|
||||||
Text="{u:I18n PasswordGeneratorPolicyInEffect}"
|
Text="{u:I18n PasswordGeneratorPolicyInEffect}"
|
||||||
StyleClass="text-muted, text-sm, text-bold"
|
StyleClass="text-muted, text-sm, text-bold"
|
||||||
HorizontalTextAlignment="Center" />
|
HorizontalTextAlignment="Center"
|
||||||
|
AutomationId="PasswordGeneratorPolicyInEffectLabel" />
|
||||||
</Frame>
|
</Frame>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid IsVisible="{Binding IsUsername, Converter={StaticResource inverseBool}}"
|
<Grid IsVisible="{Binding IsUsername, Converter={StaticResource inverseBool}}"
|
||||||
@@ -82,21 +83,24 @@
|
|||||||
x:Name="lblPassword"
|
x:Name="lblPassword"
|
||||||
StyleClass="text-lg, text-html"
|
StyleClass="text-lg, text-html"
|
||||||
Text="{Binding ColoredPassword, Mode=OneWay}"
|
Text="{Binding ColoredPassword, Mode=OneWay}"
|
||||||
Margin="0, 20" />
|
Margin="0, 20"
|
||||||
|
AutomationId="GeneratedPasswordLabel" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
||||||
Command="{Binding CopyCommand}"
|
Command="{Binding CopyCommand}"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n CopyPassword}" />
|
AutomationProperties.Name="{u:I18n CopyPassword}"
|
||||||
|
AutomationId="CopyValueButton" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Generate}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Generate}}"
|
||||||
Command="{Binding RegenerateCommand}"
|
Command="{Binding RegenerateCommand}"
|
||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n GeneratePassword}" />
|
AutomationProperties.Name="{u:I18n GeneratePassword}"
|
||||||
|
AutomationId="RegenerateValueButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid IsVisible="{Binding IsUsername}"
|
<Grid IsVisible="{Binding IsUsername}"
|
||||||
StyleClass="box-row"
|
StyleClass="box-row"
|
||||||
@@ -107,21 +111,24 @@
|
|||||||
StyleClass="text-lg, text-html"
|
StyleClass="text-lg, text-html"
|
||||||
Text="{Binding ColoredUsername, Mode=OneWay}"
|
Text="{Binding ColoredUsername, Mode=OneWay}"
|
||||||
Margin="0, 20"
|
Margin="0, 20"
|
||||||
HorizontalOptions="Start" />
|
HorizontalOptions="Start"
|
||||||
|
AutomationId="GeneratedPasswordLabel" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
||||||
Command="{Binding CopyCommand}"
|
Command="{Binding CopyCommand}"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n CopyUsername}" />
|
AutomationProperties.Name="{u:I18n CopyUsername}"
|
||||||
|
AutomationId="CopyValueButton" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Generate}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Generate}}"
|
||||||
Command="{Binding RegenerateUsernameCommand}"
|
Command="{Binding RegenerateUsernameCommand}"
|
||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n GenerateUsername}" />
|
AutomationProperties.Name="{u:I18n GenerateUsername}"
|
||||||
|
AutomationId="RegenerateValueButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<BoxView StyleClass="box-row-separator"/>
|
<BoxView StyleClass="box-row-separator"/>
|
||||||
<StackLayout StyleClass="box"
|
<StackLayout StyleClass="box"
|
||||||
@@ -135,7 +142,8 @@
|
|||||||
ItemsSource="{Binding GeneratorTypeOptions, Mode=OneTime}"
|
ItemsSource="{Binding GeneratorTypeOptions, Mode=OneTime}"
|
||||||
SelectedItem="{Binding GeneratorTypeSelected}"
|
SelectedItem="{Binding GeneratorTypeSelected}"
|
||||||
ItemDisplayBinding="{Binding ., Converter={StaticResource localizableEnum}}"
|
ItemDisplayBinding="{Binding ., Converter={StaticResource localizableEnum}}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="GeneratorTypePicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Label Text="{u:I18n Options, Header=True}"
|
<Label Text="{u:I18n Options, Header=True}"
|
||||||
StyleClass="box-header, box-header-platform"
|
StyleClass="box-header, box-header-platform"
|
||||||
@@ -161,7 +169,8 @@
|
|||||||
ItemsSource="{Binding UsernameTypeOptions, Mode=OneTime}"
|
ItemsSource="{Binding UsernameTypeOptions, Mode=OneTime}"
|
||||||
SelectedItem="{Binding UsernameTypeSelected}"
|
SelectedItem="{Binding UsernameTypeSelected}"
|
||||||
ItemDisplayBinding="{Binding ., Converter={StaticResource localizableEnum}}"
|
ItemDisplayBinding="{Binding ., Converter={StaticResource localizableEnum}}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="UsernameTypePicker" />
|
||||||
<Label
|
<Label
|
||||||
StyleClass="box-footer-label"
|
StyleClass="box-footer-label"
|
||||||
Text="{Binding UsernameTypeDescriptionLabel}" />
|
Text="{Binding UsernameTypeDescriptionLabel}" />
|
||||||
@@ -172,7 +181,8 @@
|
|||||||
StyleClass="box-label" />
|
StyleClass="box-label" />
|
||||||
<Entry x:Name="_plusAddressedEmailEntry"
|
<Entry x:Name="_plusAddressedEmailEntry"
|
||||||
Text="{Binding PlusAddressedEmail}"
|
Text="{Binding PlusAddressedEmail}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="PlusAddressedEmailEntry" />
|
||||||
<Label IsVisible="{Binding ShowUsernameEmailType}"
|
<Label IsVisible="{Binding ShowUsernameEmailType}"
|
||||||
Text="{u:I18n EmailType}"
|
Text="{u:I18n EmailType}"
|
||||||
StyleClass="box-label"
|
StyleClass="box-label"
|
||||||
@@ -203,7 +213,8 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_catchAllEmailDomainNameEntry"
|
x:Name="_catchAllEmailDomainNameEntry"
|
||||||
Text="{Binding CatchAllEmailDomain}"
|
Text="{Binding CatchAllEmailDomain}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="CatchAllEmailDomainEntry" />
|
||||||
<Label IsVisible="{Binding ShowUsernameEmailType}"
|
<Label IsVisible="{Binding ShowUsernameEmailType}"
|
||||||
Text="{u:I18n EmailType}"
|
Text="{u:I18n EmailType}"
|
||||||
StyleClass="box-label"
|
StyleClass="box-label"
|
||||||
@@ -236,26 +247,27 @@
|
|||||||
ItemsSource="{Binding ForwardedEmailServiceTypeOptions, Mode=OneTime}"
|
ItemsSource="{Binding ForwardedEmailServiceTypeOptions, Mode=OneTime}"
|
||||||
SelectedItem="{Binding ForwardedEmailServiceSelected}"
|
SelectedItem="{Binding ForwardedEmailServiceSelected}"
|
||||||
ItemDisplayBinding="{Binding ., Converter={StaticResource localizableEnum}}"
|
ItemDisplayBinding="{Binding ., Converter={StaticResource localizableEnum}}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
<!--ANONADDY OPTIONS-->
|
AutomationId="ServiceTypePicker" />
|
||||||
<Grid IsVisible="{Binding ForwardedEmailServiceSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:ForwardedEmailServiceType.AnonAddy}}"
|
<Grid
|
||||||
Grid.RowDefinitions="Auto,*"
|
Grid.RowDefinitions="Auto,*"
|
||||||
Grid.ColumnDefinitions="*,Auto">
|
Grid.ColumnDefinitions="*,Auto">
|
||||||
<Label
|
<Label
|
||||||
Margin="0,10,0,0"
|
Margin="0,10,0,0"
|
||||||
Text="{u:I18n APIAccessToken}"
|
Text="{Binding ForwardedEmailApiSecretLabel}"
|
||||||
StyleClass="box-label"/>
|
StyleClass="box-label"/>
|
||||||
<Entry
|
<Entry
|
||||||
x:Name="_anonAddyApiAccessTokenEntry"
|
Text="{Binding ForwardedEmailApiSecret}"
|
||||||
Text="{Binding AnonAddyApiAccessToken}"
|
IsPassword="{Binding ShowForwardedEmailApiSecret, Converter={StaticResource inverseBool}}"
|
||||||
IsPassword="{Binding ShowAnonAddyApiAccessToken, Converter={StaticResource inverseBool}}"
|
Grid.Row="1"
|
||||||
Grid.Row="1"/>
|
AutomationId="ForwardedEmailApiSecretEntry" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding ShowAnonAddyApiAccessToken, Converter={StaticResource inverseBool, iconGlyphConverter}, ConverterParameter={x:Static u:BooleanGlyphType.Eye}}"
|
Text="{Binding ShowForwardedEmailApiSecret, Converter={StaticResource inverseBool, iconGlyphConverter}, ConverterParameter={x:Static u:BooleanGlyphType.Eye}}"
|
||||||
Command="{Binding ToggleForwardedEmailHiddenValueCommand}"
|
Command="{Binding ToggleForwardedEmailHiddenValueCommand}"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="1"/>
|
Grid.Column="1"
|
||||||
|
AutomationId="ShowForwardedEmailApiSecretButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<Label IsVisible="{Binding ForwardedEmailServiceSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:ForwardedEmailServiceType.AnonAddy}}"
|
<Label IsVisible="{Binding ForwardedEmailServiceSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:ForwardedEmailServiceType.AnonAddy}}"
|
||||||
Text="{u:I18n DomainNameRequiredParenthesis}"
|
Text="{u:I18n DomainNameRequiredParenthesis}"
|
||||||
@@ -264,91 +276,8 @@
|
|||||||
<Entry IsVisible="{Binding ForwardedEmailServiceSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:ForwardedEmailServiceType.AnonAddy}}"
|
<Entry IsVisible="{Binding ForwardedEmailServiceSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:ForwardedEmailServiceType.AnonAddy}}"
|
||||||
x:Name="_anonAddyDomainNameEntry"
|
x:Name="_anonAddyDomainNameEntry"
|
||||||
Text="{Binding AnonAddyDomainName}"
|
Text="{Binding AnonAddyDomainName}"
|
||||||
StyleClass="box-value"/>
|
StyleClass="box-value"
|
||||||
<!--FIREFOX RELAY OPTIONS-->
|
AutomationId="AnonAddyDomainNameEntry" />
|
||||||
<Grid StyleClass="box-row, box-row-input"
|
|
||||||
IsVisible="{Binding ForwardedEmailServiceSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:ForwardedEmailServiceType.FirefoxRelay}}"
|
|
||||||
Grid.RowDefinitions="Auto,*"
|
|
||||||
Grid.ColumnDefinitions="*,Auto">
|
|
||||||
<Label
|
|
||||||
Text="{u:I18n APIAccessToken}"
|
|
||||||
StyleClass="box-label"/>
|
|
||||||
<Entry
|
|
||||||
x:Name="_firefoxRelayApiAccessTokenEntry"
|
|
||||||
Text="{Binding FirefoxRelayApiAccessToken}"
|
|
||||||
StyleClass="box-value"
|
|
||||||
Grid.Row="1"
|
|
||||||
IsPassword="{Binding ShowFirefoxRelayApiAccessToken, Converter={StaticResource inverseBool}}"/>
|
|
||||||
<controls:IconButton
|
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
|
||||||
Text="{Binding ShowFirefoxRelayApiAccessToken, Converter={StaticResource inverseBool, iconGlyphConverter}, ConverterParameter={x:Static u:BooleanGlyphType.Eye}}"
|
|
||||||
Command="{Binding ToggleForwardedEmailHiddenValueCommand}"
|
|
||||||
Grid.Row="1"
|
|
||||||
Grid.Column="1"/>
|
|
||||||
</Grid>
|
|
||||||
<!--SIMPLELOGIN OPTIONS-->
|
|
||||||
<Grid StyleClass="box-row, box-row-input"
|
|
||||||
IsVisible="{Binding ForwardedEmailServiceSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:ForwardedEmailServiceType.SimpleLogin}}"
|
|
||||||
Grid.RowDefinitions="Auto,*"
|
|
||||||
Grid.ColumnDefinitions="*,Auto">
|
|
||||||
<Label
|
|
||||||
Text="{u:I18n APIKeyRequiredParenthesis}"
|
|
||||||
StyleClass="box-label"/>
|
|
||||||
<Entry
|
|
||||||
x:Name="_simpleLoginApiKeyEntry"
|
|
||||||
Text="{Binding SimpleLoginApiKey}"
|
|
||||||
StyleClass="box-value"
|
|
||||||
Grid.Row="1"
|
|
||||||
IsPassword="{Binding ShowSimpleLoginApiKey, Converter={StaticResource inverseBool}}"/>
|
|
||||||
<controls:IconButton
|
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
|
||||||
Text="{Binding ShowSimpleLoginApiKey, Converter={StaticResource inverseBool, iconGlyphConverter}, ConverterParameter={x:Static u:BooleanGlyphType.Eye}}"
|
|
||||||
Command="{Binding ToggleForwardedEmailHiddenValueCommand}"
|
|
||||||
Grid.Row="1"
|
|
||||||
Grid.Column="1"/>
|
|
||||||
</Grid>
|
|
||||||
<!--DUCKDUCKGO OPTIONS-->
|
|
||||||
<Grid StyleClass="box-row, box-row-input"
|
|
||||||
IsVisible="{Binding ForwardedEmailServiceSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:ForwardedEmailServiceType.DuckDuckGo}}"
|
|
||||||
Grid.RowDefinitions="Auto,*"
|
|
||||||
Grid.ColumnDefinitions="*,Auto">
|
|
||||||
<Label
|
|
||||||
Text="{u:I18n APIKeyRequiredParenthesis}"
|
|
||||||
StyleClass="box-label"/>
|
|
||||||
<Entry
|
|
||||||
x:Name="_duckDuckGoApiAccessTokenEntry"
|
|
||||||
Text="{Binding DuckDuckGoApiKey}"
|
|
||||||
StyleClass="box-value"
|
|
||||||
Grid.Row="1"
|
|
||||||
IsPassword="{Binding ShowDuckDuckGoApiKey, Converter={StaticResource inverseBool}}"/>
|
|
||||||
<controls:IconButton
|
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
|
||||||
Text="{Binding ShowDuckDuckGoApiKey, Converter={StaticResource inverseBool, iconGlyphConverter}, ConverterParameter={x:Static u:BooleanGlyphType.Eye}}"
|
|
||||||
Command="{Binding ToggleForwardedEmailHiddenValueCommand}"
|
|
||||||
Grid.Row="1"
|
|
||||||
Grid.Column="1"/>
|
|
||||||
</Grid>
|
|
||||||
<!--FASTMAIL OPTIONS-->
|
|
||||||
<Grid StyleClass="box-row, box-row-input"
|
|
||||||
IsVisible="{Binding ForwardedEmailServiceSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:ForwardedEmailServiceType.Fastmail}}"
|
|
||||||
Grid.RowDefinitions="Auto,*"
|
|
||||||
Grid.ColumnDefinitions="*,Auto">
|
|
||||||
<Label
|
|
||||||
Text="{u:I18n APIKeyRequiredParenthesis}"
|
|
||||||
StyleClass="box-label"/>
|
|
||||||
<Entry
|
|
||||||
x:Name="_fastmailApiAccessTokenEntry"
|
|
||||||
Text="{Binding FastmailApiKey}"
|
|
||||||
StyleClass="box-value"
|
|
||||||
Grid.Row="1"
|
|
||||||
IsPassword="{Binding ShowFastmailApiKey, Converter={StaticResource inverseBool}}"/>
|
|
||||||
<controls:IconButton
|
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
|
||||||
Text="{Binding ShowFastmailApiKey, Converter={StaticResource iconGlyphConverter}, ConverterParameter={x:Static u:BooleanGlyphType.Eye}}"
|
|
||||||
Command="{Binding ToggleForwardedEmailHiddenValueCommand}"
|
|
||||||
Grid.Row="1"
|
|
||||||
Grid.Column="1"/>
|
|
||||||
</Grid>
|
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<!--RANDOM WORD OPTIONS-->
|
<!--RANDOM WORD OPTIONS-->
|
||||||
<Grid IsVisible="{Binding UsernameTypeSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:UsernameType.RandomWord}}">
|
<Grid IsVisible="{Binding UsernameTypeSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:UsernameType.RandomWord}}">
|
||||||
@@ -359,7 +288,8 @@
|
|||||||
<Switch
|
<Switch
|
||||||
IsToggled="{Binding CapitalizeRandomWordUsername}"
|
IsToggled="{Binding CapitalizeRandomWordUsername}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End" />
|
HorizontalOptions="End"
|
||||||
|
AutomationId="CapitalizeRandomWordUsernameToggle" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<BoxView IsVisible="{Binding UsernameTypeSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:UsernameType.RandomWord}}"
|
<BoxView IsVisible="{Binding UsernameTypeSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:UsernameType.RandomWord}}"
|
||||||
StyleClass="box-row-separator" />
|
StyleClass="box-row-separator" />
|
||||||
@@ -371,7 +301,8 @@
|
|||||||
<Switch
|
<Switch
|
||||||
IsToggled="{Binding IncludeNumberRandomWordUsername}"
|
IsToggled="{Binding IncludeNumberRandomWordUsername}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End" />
|
HorizontalOptions="End"
|
||||||
|
AutomationId="IncludeNumberRandomWordUsernameToggle" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<BoxView IsVisible="{Binding UsernameTypeSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:UsernameType.RandomWord}}"
|
<BoxView IsVisible="{Binding UsernameTypeSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:UsernameType.RandomWord}}"
|
||||||
StyleClass="box-row-separator" />
|
StyleClass="box-row-separator" />
|
||||||
@@ -386,7 +317,8 @@
|
|||||||
x:Name="_passwordTypePicker"
|
x:Name="_passwordTypePicker"
|
||||||
ItemsSource="{Binding PasswordTypeOptions, Mode=OneTime}"
|
ItemsSource="{Binding PasswordTypeOptions, Mode=OneTime}"
|
||||||
SelectedIndex="{Binding PasswordTypeSelectedIndex}"
|
SelectedIndex="{Binding PasswordTypeSelectedIndex}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="PasswordTypePicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout Spacing="0"
|
<StackLayout Spacing="0"
|
||||||
Padding="0"
|
Padding="0"
|
||||||
@@ -403,12 +335,14 @@
|
|||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
HorizontalTextAlignment="End"
|
HorizontalTextAlignment="End"
|
||||||
VerticalOptions="FillAndExpand"
|
VerticalOptions="FillAndExpand"
|
||||||
VerticalTextAlignment="Center" />
|
VerticalTextAlignment="Center"
|
||||||
|
AutomationId="NumberOfWordsLabel" />
|
||||||
<controls:ExtendedStepper
|
<controls:ExtendedStepper
|
||||||
Value="{Binding NumWords}"
|
Value="{Binding NumWords}"
|
||||||
Maximum="20"
|
Maximum="20"
|
||||||
Minimum="3"
|
Minimum="3"
|
||||||
Increment="1" />
|
Increment="1"
|
||||||
|
AutomationId="NumberOfWordsStepper" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
@@ -419,7 +353,8 @@
|
|||||||
Text="{Binding WordSeparator}"
|
Text="{Binding WordSeparator}"
|
||||||
IsSpellCheckEnabled="False"
|
IsSpellCheckEnabled="False"
|
||||||
IsTextPredictionEnabled="False"
|
IsTextPredictionEnabled="False"
|
||||||
StyleClass="box-value">
|
StyleClass="box-value"
|
||||||
|
AutomationId="WordSeparatorEntry">
|
||||||
<Entry.Effects>
|
<Entry.Effects>
|
||||||
<effects:NoEmojiKeyboardEffect />
|
<effects:NoEmojiKeyboardEffect />
|
||||||
</Entry.Effects>
|
</Entry.Effects>
|
||||||
@@ -435,7 +370,8 @@
|
|||||||
IsEnabled="{Binding EnforcedPolicyOptions.Capitalize,
|
IsEnabled="{Binding EnforcedPolicyOptions.Capitalize,
|
||||||
Converter={StaticResource inverseBool}}"
|
Converter={StaticResource inverseBool}}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End" />
|
HorizontalOptions="End"
|
||||||
|
AutomationId="CapitalizePassphraseToggle" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
<StackLayout StyleClass="box-row, box-row-switch">
|
<StackLayout StyleClass="box-row, box-row-switch">
|
||||||
@@ -448,7 +384,8 @@
|
|||||||
IsEnabled="{Binding EnforcedPolicyOptions.IncludeNumber,
|
IsEnabled="{Binding EnforcedPolicyOptions.IncludeNumber,
|
||||||
Converter={StaticResource inverseBool}}"
|
Converter={StaticResource inverseBool}}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End" />
|
HorizontalOptions="End"
|
||||||
|
AutomationId="IncludeNumbersToggle" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout Spacing="0" Padding="0" IsVisible="{Binding IsPassword}">
|
<StackLayout Spacing="0" Padding="0" IsVisible="{Binding IsPassword}">
|
||||||
@@ -462,7 +399,8 @@
|
|||||||
StyleClass="box-sub-label"
|
StyleClass="box-sub-label"
|
||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
HorizontalTextAlignment="End"
|
HorizontalTextAlignment="End"
|
||||||
WidthRequest="50" />
|
WidthRequest="50"
|
||||||
|
AutomationId="PasswordLengthLabel" />
|
||||||
<controls:ExtendedSlider
|
<controls:ExtendedSlider
|
||||||
DragCompleted="LengthSlider_DragCompleted"
|
DragCompleted="LengthSlider_DragCompleted"
|
||||||
Value="{Binding Length}"
|
Value="{Binding Length}"
|
||||||
@@ -471,7 +409,8 @@
|
|||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
Maximum="128"
|
Maximum="128"
|
||||||
Minimum="5" />
|
Minimum="5"
|
||||||
|
AutomationId="PasswordLengthSlider" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
<StackLayout StyleClass="box-row, box-row-switch">
|
<StackLayout StyleClass="box-row, box-row-switch">
|
||||||
@@ -488,7 +427,8 @@
|
|||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End"
|
HorizontalOptions="End"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n UppercaseAtoZ}"/>
|
AutomationProperties.Name="{u:I18n UppercaseAtoZ}"
|
||||||
|
AutomationId="UppercaseAtoZToggle" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
<StackLayout StyleClass="box-row, box-row-switch">
|
<StackLayout StyleClass="box-row, box-row-switch">
|
||||||
@@ -505,7 +445,8 @@
|
|||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End"
|
HorizontalOptions="End"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n LowercaseAtoZ}"/>
|
AutomationProperties.Name="{u:I18n LowercaseAtoZ}"
|
||||||
|
AutomationId="LowercaseAtoZToggle" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
<StackLayout StyleClass="box-row, box-row-switch">
|
<StackLayout StyleClass="box-row, box-row-switch">
|
||||||
@@ -522,7 +463,8 @@
|
|||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End"
|
HorizontalOptions="End"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n NumbersZeroToNine}"/>
|
AutomationProperties.Name="{u:I18n NumbersZeroToNine}"
|
||||||
|
AutomationId="NumbersZeroToNineToggle" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
<StackLayout StyleClass="box-row, box-row-switch">
|
<StackLayout StyleClass="box-row, box-row-switch">
|
||||||
@@ -539,7 +481,8 @@
|
|||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End"
|
HorizontalOptions="End"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n SpecialCharacters}"/>
|
AutomationProperties.Name="{u:I18n SpecialCharacters}"
|
||||||
|
AutomationId="SpecialCharactersToggle" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
<StackLayout StyleClass="box-row, box-row-stepper">
|
<StackLayout StyleClass="box-row, box-row-stepper">
|
||||||
@@ -554,12 +497,14 @@
|
|||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
HorizontalTextAlignment="End"
|
HorizontalTextAlignment="End"
|
||||||
VerticalOptions="FillAndExpand"
|
VerticalOptions="FillAndExpand"
|
||||||
VerticalTextAlignment="Center" />
|
VerticalTextAlignment="Center"
|
||||||
|
AutomationId="MinNumberValueLabel" />
|
||||||
<controls:ExtendedStepper
|
<controls:ExtendedStepper
|
||||||
Value="{Binding MinNumber}"
|
Value="{Binding MinNumber}"
|
||||||
Maximum="5"
|
Maximum="5"
|
||||||
Minimum="0"
|
Minimum="0"
|
||||||
Increment="1" />
|
Increment="1"
|
||||||
|
AutomationId="MinNumberStepper" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
<StackLayout StyleClass="box-row, box-row-stepper">
|
<StackLayout StyleClass="box-row, box-row-stepper">
|
||||||
@@ -574,12 +519,14 @@
|
|||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
HorizontalTextAlignment="End"
|
HorizontalTextAlignment="End"
|
||||||
VerticalOptions="FillAndExpand"
|
VerticalOptions="FillAndExpand"
|
||||||
VerticalTextAlignment="Center" />
|
VerticalTextAlignment="Center"
|
||||||
|
AutomationId="MinSpecialValueLabel" />
|
||||||
<controls:ExtendedStepper
|
<controls:ExtendedStepper
|
||||||
Value="{Binding MinSpecial}"
|
Value="{Binding MinSpecial}"
|
||||||
Maximum="5"
|
Maximum="5"
|
||||||
Minimum="0"
|
Minimum="0"
|
||||||
Increment="1" />
|
Increment="1"
|
||||||
|
AutomationId="MinSpecialStepper" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
<StackLayout StyleClass="box-row, box-row-switch">
|
<StackLayout StyleClass="box-row, box-row-switch">
|
||||||
@@ -590,7 +537,8 @@
|
|||||||
<Switch
|
<Switch
|
||||||
IsToggled="{Binding AvoidAmbiguousChars}"
|
IsToggled="{Binding AvoidAmbiguousChars}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End" />
|
HorizontalOptions="End"
|
||||||
|
AutomationId="AvoidAmbiguousCharsToggle" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ using Bit.App.Utilities;
|
|||||||
using Bit.Core;
|
using Bit.Core;
|
||||||
using Bit.Core.Abstractions;
|
using Bit.Core.Abstractions;
|
||||||
using Bit.Core.Enums;
|
using Bit.Core.Enums;
|
||||||
|
using Bit.Core.Exceptions;
|
||||||
using Bit.Core.Models.Domain;
|
using Bit.Core.Models.Domain;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
using Xamarin.CommunityToolkit.ObjectModel;
|
using Xamarin.CommunityToolkit.ObjectModel;
|
||||||
@@ -23,7 +24,7 @@ namespace Bit.App.Pages
|
|||||||
private readonly IUsernameGenerationService _usernameGenerationService;
|
private readonly IUsernameGenerationService _usernameGenerationService;
|
||||||
private readonly ITokenService _tokenService;
|
private readonly ITokenService _tokenService;
|
||||||
private readonly IDeviceActionService _deviceActionService;
|
private readonly IDeviceActionService _deviceActionService;
|
||||||
readonly LazyResolve<ILogger> _logger = new LazyResolve<ILogger>("logger");
|
readonly LazyResolve<ILogger> _logger = new LazyResolve<ILogger>();
|
||||||
|
|
||||||
private PasswordGenerationOptions _options;
|
private PasswordGenerationOptions _options;
|
||||||
private UsernameGenerationOptions _usernameOptions;
|
private UsernameGenerationOptions _usernameOptions;
|
||||||
@@ -49,11 +50,7 @@ namespace Bit.App.Pages
|
|||||||
private bool _doneIniting;
|
private bool _doneIniting;
|
||||||
private bool _showTypePicker;
|
private bool _showTypePicker;
|
||||||
private string _emailWebsite;
|
private string _emailWebsite;
|
||||||
private bool _showFirefoxRelayApiAccessToken;
|
private bool _showForwardedEmailApiSecret;
|
||||||
private bool _showAnonAddyApiAccessToken;
|
|
||||||
private bool _showSimpleLoginApiKey;
|
|
||||||
private bool _showDuckDuckGoApiKey;
|
|
||||||
private bool _showFastmailApiKey;
|
|
||||||
private bool _editMode;
|
private bool _editMode;
|
||||||
|
|
||||||
public GeneratorPageViewModel()
|
public GeneratorPageViewModel()
|
||||||
@@ -96,7 +93,7 @@ namespace Bit.App.Pages
|
|||||||
UsernameTypePromptHelpCommand = new Command(UsernameTypePromptHelp);
|
UsernameTypePromptHelpCommand = new Command(UsernameTypePromptHelp);
|
||||||
RegenerateCommand = new AsyncCommand(RegenerateAsync, onException: ex => OnSubmitException(ex), allowsMultipleExecutions: false);
|
RegenerateCommand = new AsyncCommand(RegenerateAsync, onException: ex => OnSubmitException(ex), allowsMultipleExecutions: false);
|
||||||
RegenerateUsernameCommand = new AsyncCommand(RegenerateUsernameAsync, onException: ex => OnSubmitException(ex), allowsMultipleExecutions: false);
|
RegenerateUsernameCommand = new AsyncCommand(RegenerateUsernameAsync, onException: ex => OnSubmitException(ex), allowsMultipleExecutions: false);
|
||||||
ToggleForwardedEmailHiddenValueCommand = new AsyncCommand(ToggleForwardedEmailHiddenValueAsync, onException: ex => _logger.Value.Exception(ex), allowsMultipleExecutions: false);
|
ToggleForwardedEmailHiddenValueCommand = new Command(() => ShowForwardedEmailApiSecret = !ShowForwardedEmailApiSecret);
|
||||||
CopyCommand = new AsyncCommand(CopyAsync, onException: ex => _logger.Value.Exception(ex), allowsMultipleExecutions: false);
|
CopyCommand = new AsyncCommand(CopyAsync, onException: ex => _logger.Value.Exception(ex), allowsMultipleExecutions: false);
|
||||||
CloseCommand = new AsyncCommand(CloseAsync, onException: ex => _logger.Value.Exception(ex), allowsMultipleExecutions: false);
|
CloseCommand = new AsyncCommand(CloseAsync, onException: ex => _logger.Value.Exception(ex), allowsMultipleExecutions: false);
|
||||||
}
|
}
|
||||||
@@ -415,7 +412,6 @@ namespace Bit.App.Pages
|
|||||||
|
|
||||||
public string UsernameTypeDescriptionLabel => GetUsernameTypeLabelDescription(UsernameTypeSelected);
|
public string UsernameTypeDescriptionLabel => GetUsernameTypeLabelDescription(UsernameTypeSelected);
|
||||||
|
|
||||||
|
|
||||||
public ForwardedEmailServiceType ForwardedEmailServiceSelected
|
public ForwardedEmailServiceType ForwardedEmailServiceSelected
|
||||||
{
|
{
|
||||||
get => _usernameOptions.ServiceType;
|
get => _usernameOptions.ServiceType;
|
||||||
@@ -425,7 +421,11 @@ namespace Bit.App.Pages
|
|||||||
{
|
{
|
||||||
_usernameOptions.ServiceType = value;
|
_usernameOptions.ServiceType = value;
|
||||||
Username = Constants.DefaultUsernameGenerated;
|
Username = Constants.DefaultUsernameGenerated;
|
||||||
TriggerPropertyChanged(nameof(ForwardedEmailServiceSelected));
|
TriggerPropertyChanged(nameof(ForwardedEmailServiceSelected), new string[]
|
||||||
|
{
|
||||||
|
nameof(ForwardedEmailApiSecret),
|
||||||
|
nameof(ForwardedEmailApiSecretLabel)
|
||||||
|
});
|
||||||
SaveUsernameOptionsAsync(false).FireAndForget();
|
SaveUsernameOptionsAsync(false).FireAndForget();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -445,27 +445,104 @@ namespace Bit.App.Pages
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string AnonAddyApiAccessToken
|
public string ForwardedEmailApiSecret
|
||||||
{
|
{
|
||||||
get => _usernameOptions.AnonAddyApiAccessToken;
|
get
|
||||||
|
{
|
||||||
|
switch (ForwardedEmailServiceSelected)
|
||||||
|
{
|
||||||
|
case ForwardedEmailServiceType.AnonAddy:
|
||||||
|
return _usernameOptions.AnonAddyApiAccessToken;
|
||||||
|
case ForwardedEmailServiceType.DuckDuckGo:
|
||||||
|
return _usernameOptions.DuckDuckGoApiKey;
|
||||||
|
case ForwardedEmailServiceType.Fastmail:
|
||||||
|
return _usernameOptions.FastMailApiKey;
|
||||||
|
case ForwardedEmailServiceType.FirefoxRelay:
|
||||||
|
return _usernameOptions.FirefoxRelayApiAccessToken;
|
||||||
|
case ForwardedEmailServiceType.SimpleLogin:
|
||||||
|
return _usernameOptions.SimpleLoginApiKey;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (_usernameOptions.AnonAddyApiAccessToken != value)
|
bool changed = false;
|
||||||
|
switch (ForwardedEmailServiceSelected)
|
||||||
{
|
{
|
||||||
_usernameOptions.AnonAddyApiAccessToken = value;
|
case ForwardedEmailServiceType.AnonAddy:
|
||||||
TriggerPropertyChanged(nameof(AnonAddyApiAccessToken));
|
if (_usernameOptions.AnonAddyApiAccessToken != value)
|
||||||
|
{
|
||||||
|
_usernameOptions.AnonAddyApiAccessToken = value;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ForwardedEmailServiceType.DuckDuckGo:
|
||||||
|
if (_usernameOptions.DuckDuckGoApiKey != value)
|
||||||
|
{
|
||||||
|
_usernameOptions.DuckDuckGoApiKey = value;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ForwardedEmailServiceType.Fastmail:
|
||||||
|
if (_usernameOptions.FastMailApiKey != value)
|
||||||
|
{
|
||||||
|
_usernameOptions.FastMailApiKey = value;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ForwardedEmailServiceType.FirefoxRelay:
|
||||||
|
if (_usernameOptions.FirefoxRelayApiAccessToken != value)
|
||||||
|
{
|
||||||
|
_usernameOptions.FirefoxRelayApiAccessToken = value;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ForwardedEmailServiceType.SimpleLogin:
|
||||||
|
if (_usernameOptions.SimpleLoginApiKey != value)
|
||||||
|
{
|
||||||
|
_usernameOptions.SimpleLoginApiKey = value;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed)
|
||||||
|
{
|
||||||
|
TriggerPropertyChanged(nameof(ForwardedEmailApiSecret));
|
||||||
SaveUsernameOptionsAsync(false).FireAndForget();
|
SaveUsernameOptionsAsync(false).FireAndForget();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ShowAnonAddyApiAccessToken
|
public string ForwardedEmailApiSecretLabel
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return _showAnonAddyApiAccessToken;
|
switch (ForwardedEmailServiceSelected)
|
||||||
|
{
|
||||||
|
case ForwardedEmailServiceType.AnonAddy:
|
||||||
|
case ForwardedEmailServiceType.FirefoxRelay:
|
||||||
|
return AppResources.APIAccessToken;
|
||||||
|
case ForwardedEmailServiceType.DuckDuckGo:
|
||||||
|
case ForwardedEmailServiceType.Fastmail:
|
||||||
|
case ForwardedEmailServiceType.SimpleLogin:
|
||||||
|
return AppResources.APIKeyRequiredParenthesis;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
set => SetProperty(ref _showAnonAddyApiAccessToken, value);
|
}
|
||||||
|
|
||||||
|
public bool ShowForwardedEmailApiSecret
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _showForwardedEmailApiSecret;
|
||||||
|
}
|
||||||
|
set => SetProperty(ref _showForwardedEmailApiSecret, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string AnonAddyDomainName
|
public string AnonAddyDomainName
|
||||||
@@ -482,99 +559,6 @@ namespace Bit.App.Pages
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string FirefoxRelayApiAccessToken
|
|
||||||
{
|
|
||||||
get => _usernameOptions.FirefoxRelayApiAccessToken;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (_usernameOptions.FirefoxRelayApiAccessToken != value)
|
|
||||||
{
|
|
||||||
_usernameOptions.FirefoxRelayApiAccessToken = value;
|
|
||||||
TriggerPropertyChanged(nameof(FirefoxRelayApiAccessToken));
|
|
||||||
SaveUsernameOptionsAsync(false).FireAndForget();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ShowFirefoxRelayApiAccessToken
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _showFirefoxRelayApiAccessToken;
|
|
||||||
}
|
|
||||||
set => SetProperty(ref _showFirefoxRelayApiAccessToken, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public string SimpleLoginApiKey
|
|
||||||
{
|
|
||||||
get => _usernameOptions.SimpleLoginApiKey;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (_usernameOptions.SimpleLoginApiKey != value)
|
|
||||||
{
|
|
||||||
_usernameOptions.SimpleLoginApiKey = value;
|
|
||||||
TriggerPropertyChanged(nameof(SimpleLoginApiKey));
|
|
||||||
SaveUsernameOptionsAsync(false).FireAndForget();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ShowSimpleLoginApiKey
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _showSimpleLoginApiKey;
|
|
||||||
}
|
|
||||||
set => SetProperty(ref _showSimpleLoginApiKey, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public string DuckDuckGoApiKey
|
|
||||||
{
|
|
||||||
get => _usernameOptions.DuckDuckGoApiKey;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (_usernameOptions.DuckDuckGoApiKey != value)
|
|
||||||
{
|
|
||||||
_usernameOptions.DuckDuckGoApiKey = value;
|
|
||||||
TriggerPropertyChanged(nameof(DuckDuckGoApiKey));
|
|
||||||
SaveUsernameOptionsAsync(false).FireAndForget();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ShowDuckDuckGoApiKey
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _showDuckDuckGoApiKey;
|
|
||||||
}
|
|
||||||
set => SetProperty(ref _showDuckDuckGoApiKey, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public string FastmailApiKey
|
|
||||||
{
|
|
||||||
get => _usernameOptions.FastMailApiKey;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (_usernameOptions.FastMailApiKey != value)
|
|
||||||
{
|
|
||||||
_usernameOptions.FastMailApiKey = value;
|
|
||||||
TriggerPropertyChanged(nameof(FastmailApiKey));
|
|
||||||
SaveUsernameOptionsAsync(false).FireAndForget();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ShowFastmailApiKey
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _showFastmailApiKey;
|
|
||||||
}
|
|
||||||
set => SetProperty(ref _showFastmailApiKey, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CapitalizeRandomWordUsername
|
public bool CapitalizeRandomWordUsername
|
||||||
{
|
{
|
||||||
get => _usernameOptions.CapitalizeRandomWordUsername;
|
get => _usernameOptions.CapitalizeRandomWordUsername;
|
||||||
@@ -807,12 +791,9 @@ namespace Bit.App.Pages
|
|||||||
TriggerPropertyChanged(nameof(PlusAddressedEmailTypeSelected));
|
TriggerPropertyChanged(nameof(PlusAddressedEmailTypeSelected));
|
||||||
TriggerPropertyChanged(nameof(IncludeNumberRandomWordUsername));
|
TriggerPropertyChanged(nameof(IncludeNumberRandomWordUsername));
|
||||||
TriggerPropertyChanged(nameof(CapitalizeRandomWordUsername));
|
TriggerPropertyChanged(nameof(CapitalizeRandomWordUsername));
|
||||||
TriggerPropertyChanged(nameof(SimpleLoginApiKey));
|
TriggerPropertyChanged(nameof(ForwardedEmailApiSecret));
|
||||||
TriggerPropertyChanged(nameof(FirefoxRelayApiAccessToken));
|
TriggerPropertyChanged(nameof(ForwardedEmailApiSecretLabel));
|
||||||
TriggerPropertyChanged(nameof(AnonAddyDomainName));
|
TriggerPropertyChanged(nameof(AnonAddyDomainName));
|
||||||
TriggerPropertyChanged(nameof(AnonAddyApiAccessToken));
|
|
||||||
TriggerPropertyChanged(nameof(DuckDuckGoApiKey));
|
|
||||||
TriggerPropertyChanged(nameof(FastmailApiKey));
|
|
||||||
TriggerPropertyChanged(nameof(CatchAllEmailDomain));
|
TriggerPropertyChanged(nameof(CatchAllEmailDomain));
|
||||||
TriggerPropertyChanged(nameof(ForwardedEmailServiceSelected));
|
TriggerPropertyChanged(nameof(ForwardedEmailServiceSelected));
|
||||||
TriggerPropertyChanged(nameof(UsernameTypeSelected));
|
TriggerPropertyChanged(nameof(UsernameTypeSelected));
|
||||||
@@ -845,15 +826,23 @@ namespace Bit.App.Pages
|
|||||||
{
|
{
|
||||||
_logger.Value.Exception(ex);
|
_logger.Value.Exception(ex);
|
||||||
|
|
||||||
|
string message = AppResources.GenericErrorMessage;
|
||||||
|
|
||||||
if (IsUsername && UsernameTypeSelected == UsernameType.ForwardedEmailAlias)
|
if (IsUsername && UsernameTypeSelected == UsernameType.ForwardedEmailAlias)
|
||||||
{
|
{
|
||||||
await Device.InvokeOnMainThreadAsync(() => Page.DisplayAlert(
|
if (ex is ForwardedEmailInvalidSecretException)
|
||||||
AppResources.AnErrorHasOccurred, string.Format(AppResources.UnknownXErrorMessage, ForwardedEmailServiceSelected), AppResources.Ok));
|
{
|
||||||
}
|
message = ForwardedEmailServiceSelected == ForwardedEmailServiceType.AnonAddy || ForwardedEmailServiceSelected == ForwardedEmailServiceType.FirefoxRelay
|
||||||
else
|
? AppResources.InvalidAPIToken
|
||||||
{
|
: AppResources.InvalidAPIKey;
|
||||||
await Device.InvokeOnMainThreadAsync(() => Page.DisplayAlert(AppResources.AnErrorHasOccurred, AppResources.GenericErrorMessage, AppResources.Ok));
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
message = string.Format(AppResources.UnknownXErrorMessage, ForwardedEmailServiceSelected);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await Device.InvokeOnMainThreadAsync(() => Page.DisplayAlert(AppResources.AnErrorHasOccurred, message, AppResources.Ok));
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetUsernameTypeLabelDescription(UsernameType value)
|
private string GetUsernameTypeLabelDescription(UsernameType value)
|
||||||
@@ -870,27 +859,5 @@ namespace Bit.App.Pages
|
|||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task ToggleForwardedEmailHiddenValueAsync()
|
|
||||||
{
|
|
||||||
switch (ForwardedEmailServiceSelected)
|
|
||||||
{
|
|
||||||
case ForwardedEmailServiceType.AnonAddy:
|
|
||||||
ShowAnonAddyApiAccessToken = !ShowAnonAddyApiAccessToken;
|
|
||||||
break;
|
|
||||||
case ForwardedEmailServiceType.FirefoxRelay:
|
|
||||||
ShowFirefoxRelayApiAccessToken = !ShowFirefoxRelayApiAccessToken;
|
|
||||||
break;
|
|
||||||
case ForwardedEmailServiceType.SimpleLogin:
|
|
||||||
ShowSimpleLoginApiKey = !ShowSimpleLoginApiKey;
|
|
||||||
break;
|
|
||||||
case ForwardedEmailServiceType.DuckDuckGo:
|
|
||||||
ShowDuckDuckGoApiKey = !ShowDuckDuckGoApiKey;
|
|
||||||
break;
|
|
||||||
case ForwardedEmailServiceType.Fastmail:
|
|
||||||
ShowFastmailApiKey = !ShowFastmailApiKey;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,7 +71,8 @@
|
|||||||
<Label
|
<Label
|
||||||
Text="{u:I18n SendDisabledWarning}"
|
Text="{u:I18n SendDisabledWarning}"
|
||||||
StyleClass="text-muted, text-sm, text-bold"
|
StyleClass="text-muted, text-sm, text-bold"
|
||||||
HorizontalTextAlignment="Center" />
|
HorizontalTextAlignment="Center"
|
||||||
|
AutomationId="SendDisabledWarningMessageLabel" />
|
||||||
</Frame>
|
</Frame>
|
||||||
<Frame
|
<Frame
|
||||||
IsVisible="{Binding SendOptionsPolicyInEffect}"
|
IsVisible="{Binding SendOptionsPolicyInEffect}"
|
||||||
@@ -83,7 +84,8 @@
|
|||||||
<Label
|
<Label
|
||||||
Text="{u:I18n SendOptionsPolicyInEffect}"
|
Text="{u:I18n SendOptionsPolicyInEffect}"
|
||||||
StyleClass="text-muted, text-sm, text-bold"
|
StyleClass="text-muted, text-sm, text-bold"
|
||||||
HorizontalTextAlignment="Center" />
|
HorizontalTextAlignment="Center"
|
||||||
|
AutomationId="SendOptionsPolicyInEffectLabel" />
|
||||||
</Frame>
|
</Frame>
|
||||||
<StackLayout StyleClass="box-row">
|
<StackLayout StyleClass="box-row">
|
||||||
<Label
|
<Label
|
||||||
@@ -93,7 +95,8 @@
|
|||||||
x:Name="_nameEntry"
|
x:Name="_nameEntry"
|
||||||
Text="{Binding Send.Name}"
|
Text="{Binding Send.Name}"
|
||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="SendNameEntry" />
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n NameInfo}"
|
Text="{u:I18n NameInfo}"
|
||||||
StyleClass="box-footer-label"
|
StyleClass="box-footer-label"
|
||||||
@@ -123,6 +126,7 @@
|
|||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n File}"
|
AutomationProperties.Name="{u:I18n File}"
|
||||||
AutomationProperties.HelpText="{Binding FileTypeAccessibilityLabel}"
|
AutomationProperties.HelpText="{Binding FileTypeAccessibilityLabel}"
|
||||||
|
AutomationId="SendFileButton"
|
||||||
Grid.Column="0">
|
Grid.Column="0">
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
@@ -135,6 +139,7 @@
|
|||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Text}"
|
AutomationProperties.Name="{u:I18n Text}"
|
||||||
AutomationProperties.HelpText="{Binding TextTypeAccessibilityLabel}"
|
AutomationProperties.HelpText="{Binding TextTypeAccessibilityLabel}"
|
||||||
|
AutomationId="SendTextButton"
|
||||||
Grid.Column="1">
|
Grid.Column="1">
|
||||||
</Button>
|
</Button>
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -152,12 +157,14 @@
|
|||||||
Text="{Binding Send.File.FileName, Mode=OneWay}"
|
Text="{Binding Send.File.FileName, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
VerticalTextAlignment="Center"
|
VerticalTextAlignment="Center"
|
||||||
HorizontalOptions="StartAndExpand" />
|
HorizontalOptions="StartAndExpand"
|
||||||
|
AutomationId="SendFileNameLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Send.File.SizeName, Mode=OneWay}"
|
Text="{Binding Send.File.SizeName, Mode=OneWay}"
|
||||||
StyleClass="box-sub-label"
|
StyleClass="box-sub-label"
|
||||||
HorizontalTextAlignment="End"
|
HorizontalTextAlignment="End"
|
||||||
VerticalTextAlignment="Center" />
|
VerticalTextAlignment="Center"
|
||||||
|
AutomationId="SendFileSizeLabel" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout
|
<StackLayout
|
||||||
IsVisible="{Binding EditMode, Converter={StaticResource inverseBool}}"
|
IsVisible="{Binding EditMode, Converter={StaticResource inverseBool}}"
|
||||||
@@ -168,20 +175,23 @@
|
|||||||
LineBreakMode="CharacterWrap"
|
LineBreakMode="CharacterWrap"
|
||||||
StyleClass="text-sm, text-muted"
|
StyleClass="text-sm, text-muted"
|
||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
HorizontalTextAlignment="Center" />
|
HorizontalTextAlignment="Center"
|
||||||
|
AutomationId="SendNoFileChosenLabel" />
|
||||||
<Label
|
<Label
|
||||||
IsVisible="{Binding FileName, Converter={StaticResource notNull}}"
|
IsVisible="{Binding FileName, Converter={StaticResource notNull}}"
|
||||||
Text="{Binding FileName}"
|
Text="{Binding FileName}"
|
||||||
LineBreakMode="CharacterWrap"
|
LineBreakMode="CharacterWrap"
|
||||||
StyleClass="text-sm, text-muted"
|
StyleClass="text-sm, text-muted"
|
||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
HorizontalTextAlignment="Center" />
|
HorizontalTextAlignment="Center"
|
||||||
|
AutomationId="SendCurrentFileNameLabel" />
|
||||||
<Button
|
<Button
|
||||||
Text="{u:I18n ChooseFile}"
|
Text="{u:I18n ChooseFile}"
|
||||||
IsVisible="{Binding IsAddFromShare, Converter={StaticResource inverseBool}}"
|
IsVisible="{Binding IsAddFromShare, Converter={StaticResource inverseBool}}"
|
||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
StyleClass="box-button-row"
|
StyleClass="box-button-row"
|
||||||
Clicked="ChooseFile_Clicked" />
|
Clicked="ChooseFile_Clicked"
|
||||||
|
AutomationId="SendChooseFileButton" />
|
||||||
<Label
|
<Label
|
||||||
Margin="0, 5, 0, 0"
|
Margin="0, 5, 0, 0"
|
||||||
Text="{u:I18n MaxFileSize}"
|
Text="{u:I18n MaxFileSize}"
|
||||||
@@ -207,7 +217,8 @@
|
|||||||
Text="{Binding Send.Text.Text}"
|
Text="{Binding Send.Text.Text}"
|
||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Margin="{Binding EditorMargins}"
|
Margin="{Binding EditorMargins}"
|
||||||
|
AutomationId="SendTextContentEntry"
|
||||||
effects:ScrollEnabledEffect.IsScrollEnabled="false" >
|
effects:ScrollEnabledEffect.IsScrollEnabled="false" >
|
||||||
<Editor.Behaviors>
|
<Editor.Behaviors>
|
||||||
<behaviors:EditorPreventAutoBottomScrollingOnFocusedBehavior ParentScrollView="{x:Reference _scrollView}" />
|
<behaviors:EditorPreventAutoBottomScrollingOnFocusedBehavior ParentScrollView="{x:Reference _scrollView}" />
|
||||||
@@ -235,7 +246,8 @@
|
|||||||
IsToggled="{Binding Send.Text.Hidden}"
|
IsToggled="{Binding Send.Text.Hidden}"
|
||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
HorizontalOptions="End"
|
HorizontalOptions="End"
|
||||||
Margin="10,0,0,0" />
|
Margin="10,0,0,0"
|
||||||
|
AutomationId="SendHideTextByDefaultToggle" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout
|
<StackLayout
|
||||||
@@ -249,7 +261,8 @@
|
|||||||
IsToggled="{Binding ShareOnSave}"
|
IsToggled="{Binding ShareOnSave}"
|
||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
HorizontalOptions="End"
|
HorizontalOptions="End"
|
||||||
Margin="10,0,0,0" />
|
Margin="10,0,0,0"
|
||||||
|
AutomationId="SendShareSendAfterSaveToggle" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout
|
<StackLayout
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
@@ -263,21 +276,24 @@
|
|||||||
StyleClass="box-row-button"
|
StyleClass="box-row-button"
|
||||||
TextColor="{DynamicResource PrimaryColor}"
|
TextColor="{DynamicResource PrimaryColor}"
|
||||||
Margin="0"
|
Margin="0"
|
||||||
AutomationProperties.IsInAccessibleTree="False"/>
|
AutomationProperties.IsInAccessibleTree="False"
|
||||||
|
AutomationId="SendShowHideOptionsButton" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
x:Name="_btnOptionsUp"
|
x:Name="_btnOptionsUp"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.ChevronUp}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.ChevronUp}}"
|
||||||
StyleClass="box-row-button"
|
StyleClass="box-row-button"
|
||||||
TextColor="{DynamicResource PrimaryColor}"
|
TextColor="{DynamicResource PrimaryColor}"
|
||||||
IsVisible="{Binding ShowOptions}"
|
IsVisible="{Binding ShowOptions}"
|
||||||
AutomationProperties.IsInAccessibleTree="False"/>
|
AutomationProperties.IsInAccessibleTree="False"
|
||||||
|
AutomationId="SendOptionsDisplayed" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
x:Name="_btnOptionsDown"
|
x:Name="_btnOptionsDown"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.AngleDown}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.AngleDown}}"
|
||||||
StyleClass="box-row-button"
|
StyleClass="box-row-button"
|
||||||
TextColor="{DynamicResource PrimaryColor}"
|
TextColor="{DynamicResource PrimaryColor}"
|
||||||
IsVisible="{Binding ShowOptions, Converter={StaticResource inverseBool}}"
|
IsVisible="{Binding ShowOptions, Converter={StaticResource inverseBool}}"
|
||||||
AutomationProperties.IsInAccessibleTree="False"/>
|
AutomationProperties.IsInAccessibleTree="False"
|
||||||
|
AutomationId="SendOptionsHidden" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout IsVisible="{Binding ShowOptions}">
|
<StackLayout IsVisible="{Binding ShowOptions}">
|
||||||
<StackLayout
|
<StackLayout
|
||||||
@@ -294,7 +310,8 @@
|
|||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n DeletionTime}" />
|
AutomationProperties.Name="{u:I18n DeletionTime}"
|
||||||
|
AutomationId="SendDeletionOptionsPicker" />
|
||||||
<Grid
|
<Grid
|
||||||
IsVisible="{Binding ShowDeletionCustomPickers}"
|
IsVisible="{Binding ShowDeletionCustomPickers}"
|
||||||
Margin="0,5,0,0">
|
Margin="0,5,0,0">
|
||||||
@@ -308,14 +325,16 @@
|
|||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n DeletionDate}"
|
AutomationProperties.Name="{u:I18n DeletionDate}"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="SendCustomDeletionDatePicker" />
|
||||||
<controls:ExtendedTimePicker
|
<controls:ExtendedTimePicker
|
||||||
NullableTime="{Binding DeletionDateTimeViewModel.Time, Mode=TwoWay}"
|
NullableTime="{Binding DeletionDateTimeViewModel.Time, Mode=TwoWay}"
|
||||||
Format="t"
|
Format="t"
|
||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n DeletionTime}"
|
AutomationProperties.Name="{u:I18n DeletionTime}"
|
||||||
Grid.Column="1" />
|
Grid.Column="1"
|
||||||
|
AutomationId="SendCustomDeletionTimePicker" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n DeletionDateInfo}"
|
Text="{u:I18n DeletionDateInfo}"
|
||||||
@@ -334,7 +353,8 @@
|
|||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ExpirationTime}" />
|
AutomationProperties.Name="{u:I18n ExpirationTime}"
|
||||||
|
AutomationId="SendExpirationOptionsPicker" />
|
||||||
<Grid
|
<Grid
|
||||||
IsVisible="{Binding ShowExpirationCustomPickers}"
|
IsVisible="{Binding ShowExpirationCustomPickers}"
|
||||||
Margin="0,5,0,0">
|
Margin="0,5,0,0">
|
||||||
@@ -349,7 +369,8 @@
|
|||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ExpirationDate}"
|
AutomationProperties.Name="{u:I18n ExpirationDate}"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="SendCustomExpirationDatePicker" />
|
||||||
<controls:ExtendedTimePicker
|
<controls:ExtendedTimePicker
|
||||||
NullableTime="{Binding ExpirationDateTimeViewModel.Time, Mode=TwoWay}"
|
NullableTime="{Binding ExpirationDateTimeViewModel.Time, Mode=TwoWay}"
|
||||||
PlaceHolder="--:-- --"
|
PlaceHolder="--:-- --"
|
||||||
@@ -357,7 +378,8 @@
|
|||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ExpirationTime}"
|
AutomationProperties.Name="{u:I18n ExpirationTime}"
|
||||||
Grid.Column="1" />
|
Grid.Column="1"
|
||||||
|
AutomationId="SendCustomExpirationTimePicker" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<StackLayout
|
<StackLayout
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
@@ -374,7 +396,8 @@
|
|||||||
FontSize="{Binding SegmentedButtonFontSize}"
|
FontSize="{Binding SegmentedButtonFontSize}"
|
||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
StyleClass="box-row-button"
|
StyleClass="box-row-button"
|
||||||
Clicked="ClearExpirationDate_Clicked" />
|
Clicked="ClearExpirationDate_Clicked"
|
||||||
|
AutomationId="SendClearExpirationDateButton" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout
|
<StackLayout
|
||||||
@@ -393,13 +416,15 @@
|
|||||||
Keyboard="Numeric"
|
Keyboard="Numeric"
|
||||||
MaxLength="9"
|
MaxLength="9"
|
||||||
TextChanged="OnMaxAccessCountTextChanged"
|
TextChanged="OnMaxAccessCountTextChanged"
|
||||||
HorizontalOptions="FillAndExpand" />
|
HorizontalOptions="FillAndExpand"
|
||||||
|
AutomationId="SendMaxAccessCountEntry" />
|
||||||
<controls:ExtendedStepper
|
<controls:ExtendedStepper
|
||||||
x:Name="_maxAccessCountStepper"
|
x:Name="_maxAccessCountStepper"
|
||||||
Value="{Binding MaxAccessCount}"
|
Value="{Binding MaxAccessCount}"
|
||||||
Maximum="999999999"
|
Maximum="999999999"
|
||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
Margin="10,0,0,0" />
|
Margin="10,0,0,0"
|
||||||
|
AutomationId="SendMaxAccessCountStepper" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n MaximumAccessCountInfo}"
|
Text="{u:I18n MaximumAccessCountInfo}"
|
||||||
@@ -419,7 +444,8 @@
|
|||||||
<Label
|
<Label
|
||||||
Text="{Binding Send.AccessCount, Mode=OneWay}"
|
Text="{Binding Send.AccessCount, Mode=OneWay}"
|
||||||
StyleClass="box-label"
|
StyleClass="box-label"
|
||||||
VerticalTextAlignment="Center" />
|
VerticalTextAlignment="Center"
|
||||||
|
AutomationId="SendCurrentAccessCountLabel" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout
|
<StackLayout
|
||||||
@@ -436,7 +462,8 @@
|
|||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
IsSpellCheckEnabled="False"
|
IsSpellCheckEnabled="False"
|
||||||
IsTextPredictionEnabled="False"
|
IsTextPredictionEnabled="False"
|
||||||
HorizontalOptions="FillAndExpand" />
|
HorizontalOptions="FillAndExpand"
|
||||||
|
AutomationId="SendNewPasswordEntry" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
@@ -445,7 +472,8 @@
|
|||||||
Margin="10,0,0,0"
|
Margin="10,0,0,0"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
||||||
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}" />
|
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"
|
||||||
|
AutomationId="SendShowHidePasswordButton" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n PasswordInfo}"
|
Text="{u:I18n PasswordInfo}"
|
||||||
@@ -464,7 +492,8 @@
|
|||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Margin="{Binding EditorMargins}"
|
Margin="{Binding EditorMargins}"
|
||||||
effects:ScrollEnabledEffect.IsScrollEnabled="false" >
|
effects:ScrollEnabledEffect.IsScrollEnabled="false"
|
||||||
|
AutomationId="SendNotesEntry">
|
||||||
<Editor.Behaviors>
|
<Editor.Behaviors>
|
||||||
<behaviors:EditorPreventAutoBottomScrollingOnFocusedBehavior ParentScrollView="{x:Reference _scrollView}" />
|
<behaviors:EditorPreventAutoBottomScrollingOnFocusedBehavior ParentScrollView="{x:Reference _scrollView}" />
|
||||||
</Editor.Behaviors>
|
</Editor.Behaviors>
|
||||||
@@ -492,7 +521,8 @@
|
|||||||
IsToggled="{Binding Send.HideEmail}"
|
IsToggled="{Binding Send.HideEmail}"
|
||||||
IsEnabled="{Binding DisableHideEmailControl, Converter={StaticResource inverseBool}}"
|
IsEnabled="{Binding DisableHideEmailControl, Converter={StaticResource inverseBool}}"
|
||||||
HorizontalOptions="End"
|
HorizontalOptions="End"
|
||||||
Margin="10,0,0,0" />
|
Margin="10,0,0,0"
|
||||||
|
AutomationId="SendHideEmailSwitch" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout
|
<StackLayout
|
||||||
StyleClass="box-row, box-row-switch"
|
StyleClass="box-row, box-row-switch"
|
||||||
@@ -506,7 +536,8 @@
|
|||||||
IsToggled="{Binding Send.Disabled}"
|
IsToggled="{Binding Send.Disabled}"
|
||||||
IsEnabled="{Binding SendEnabled}"
|
IsEnabled="{Binding SendEnabled}"
|
||||||
HorizontalOptions="End"
|
HorizontalOptions="End"
|
||||||
Margin="10,0,0,0" />
|
Margin="10,0,0,0"
|
||||||
|
AutomationId="SendDeactivateSwitch" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,8 @@
|
|||||||
Priority="-2"
|
Priority="-2"
|
||||||
UseOriginalImage="True"
|
UseOriginalImage="True"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Account}" />
|
AutomationProperties.Name="{u:I18n Account}"
|
||||||
|
AutomationId="AccountIconButton" />
|
||||||
<ToolbarItem Text="{u:I18n Cancel}" Clicked="Close_Clicked" Order="Primary" Priority="-1" x:Name="_closeItem" />
|
<ToolbarItem Text="{u:I18n Cancel}" Clicked="Close_Clicked" Order="Primary" Priority="-1" x:Name="_closeItem" />
|
||||||
<ToolbarItem Text="{u:I18n Save}" Clicked="Save_Clicked" Order="Primary" x:Name="_saveItem"/>
|
<ToolbarItem Text="{u:I18n Save}" Clicked="Save_Clicked" Order="Primary" x:Name="_saveItem"/>
|
||||||
</ContentPage.ToolbarItems>
|
</ContentPage.ToolbarItems>
|
||||||
|
|||||||
@@ -44,13 +44,15 @@
|
|||||||
<controls:SendViewCell
|
<controls:SendViewCell
|
||||||
Send="{Binding Send}"
|
Send="{Binding Send}"
|
||||||
ButtonCommand="{Binding BindingContext.SendOptionsCommand, Source={x:Reference _page}}"
|
ButtonCommand="{Binding BindingContext.SendOptionsCommand, Source={x:Reference _page}}"
|
||||||
ShowOptions="{Binding BindingContext.SendEnabled, Source={x:Reference _page}}" />
|
ShowOptions="{Binding BindingContext.SendEnabled, Source={x:Reference _page}}"
|
||||||
|
AutomationId="SendCell" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
<DataTemplate x:Key="sendGroupTemplate"
|
<DataTemplate x:Key="sendGroupTemplate"
|
||||||
x:DataType="pages:SendGroupingsPageListItem">
|
x:DataType="pages:SendGroupingsPageListItem">
|
||||||
<controls:ExtendedStackLayout Orientation="Horizontal"
|
<controls:ExtendedStackLayout Orientation="Horizontal"
|
||||||
StyleClass="list-row, list-row-platform">
|
StyleClass="list-row, list-row-platform"
|
||||||
|
AutomationId="{Binding AutomationId}">
|
||||||
<controls:IconLabel Text="{Binding Icon, Mode=OneWay}"
|
<controls:IconLabel Text="{Binding Icon, Mode=OneWay}"
|
||||||
HorizontalOptions="Start"
|
HorizontalOptions="Start"
|
||||||
VerticalOptions="Center"
|
VerticalOptions="Center"
|
||||||
@@ -64,12 +66,14 @@
|
|||||||
LineBreakMode="TailTruncation"
|
LineBreakMode="TailTruncation"
|
||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
StyleClass="list-title" />
|
StyleClass="list-title"
|
||||||
|
AutomationId="SendFilterNameLabel" />
|
||||||
<Label Text="{Binding ItemCount, Mode=OneWay}"
|
<Label Text="{Binding ItemCount, Mode=OneWay}"
|
||||||
HorizontalOptions="End"
|
HorizontalOptions="End"
|
||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
HorizontalTextAlignment="End"
|
HorizontalTextAlignment="End"
|
||||||
StyleClass="list-sub" />
|
StyleClass="list-sub"
|
||||||
|
AutomationId="SendFilterCountLabel" />
|
||||||
</controls:ExtendedStackLayout>
|
</controls:ExtendedStackLayout>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
|
|||||||
@@ -66,5 +66,27 @@ namespace Bit.App.Pages
|
|||||||
return _icon;
|
return _icon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string AutomationId
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_name != null)
|
||||||
|
{
|
||||||
|
return "SendItem";
|
||||||
|
}
|
||||||
|
if (Type != null)
|
||||||
|
{
|
||||||
|
switch (Type.Value)
|
||||||
|
{
|
||||||
|
case SendType.Text:
|
||||||
|
return "SendTextFilter";
|
||||||
|
case SendType.File:
|
||||||
|
return "SendFileFilter";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,8 @@
|
|||||||
Margin="20, 0"
|
Margin="20, 0"
|
||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
HorizontalOptions="CenterAndExpand"
|
HorizontalOptions="CenterAndExpand"
|
||||||
HorizontalTextAlignment="Center" />
|
HorizontalTextAlignment="Center"
|
||||||
|
AutomationId="NoSendDisplayedLabel" />
|
||||||
<controls:ExtendedCollectionView
|
<controls:ExtendedCollectionView
|
||||||
IsVisible="{Binding ShowList}"
|
IsVisible="{Binding ShowList}"
|
||||||
ItemsSource="{Binding Sends}"
|
ItemsSource="{Binding Sends}"
|
||||||
@@ -67,13 +68,15 @@
|
|||||||
SelectionMode="Single"
|
SelectionMode="Single"
|
||||||
SelectionChanged="RowSelected"
|
SelectionChanged="RowSelected"
|
||||||
StyleClass="list, list-platform"
|
StyleClass="list, list-platform"
|
||||||
ExtraDataForLogging="Sends Page">
|
ExtraDataForLogging="Sends Page"
|
||||||
|
AutomationId="SendCellList">
|
||||||
<CollectionView.ItemTemplate>
|
<CollectionView.ItemTemplate>
|
||||||
<DataTemplate x:DataType="views:SendView">
|
<DataTemplate x:DataType="views:SendView">
|
||||||
<controls:SendViewCell
|
<controls:SendViewCell
|
||||||
Send="{Binding .}"
|
Send="{Binding .}"
|
||||||
ButtonCommand="{Binding BindingContext.SendOptionsCommand, Source={x:Reference _page}}"
|
ButtonCommand="{Binding BindingContext.SendOptionsCommand, Source={x:Reference _page}}"
|
||||||
ShowOptions="{Binding BindingContext.SendEnabled, Source={x:Reference _page}}" />
|
ShowOptions="{Binding BindingContext.SendEnabled, Source={x:Reference _page}}"
|
||||||
|
AutomationId="SendCell" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</CollectionView.ItemTemplate>
|
</CollectionView.ItemTemplate>
|
||||||
</controls:ExtendedCollectionView>
|
</controls:ExtendedCollectionView>
|
||||||
|
|||||||
@@ -13,8 +13,13 @@
|
|||||||
</ContentPage.BindingContext>
|
</ContentPage.BindingContext>
|
||||||
|
|
||||||
<ContentPage.ToolbarItems>
|
<ContentPage.ToolbarItems>
|
||||||
<ToolbarItem Text="{u:I18n Cancel}" Clicked="Close_Clicked" Order="Primary" Priority="-1" />
|
<ToolbarItem Text="{u:I18n Cancel}"
|
||||||
<ToolbarItem Text="{u:I18n Save}" Clicked="Save_Clicked" Order="Primary" />
|
Clicked="Close_Clicked"
|
||||||
|
Order="Primary"
|
||||||
|
Priority="-1" />
|
||||||
|
<ToolbarItem Text="{u:I18n Save}"
|
||||||
|
Clicked="Save_Clicked"
|
||||||
|
Order="Primary" />
|
||||||
<ToolbarItem Text="{u:I18n Delete}"
|
<ToolbarItem Text="{u:I18n Delete}"
|
||||||
Clicked="Delete_Clicked"
|
Clicked="Delete_Clicked"
|
||||||
Order="Secondary"
|
Order="Secondary"
|
||||||
@@ -43,7 +48,8 @@
|
|||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
x:Name="_nameEntry"
|
x:Name="_nameEntry"
|
||||||
ReturnType="Go"
|
ReturnType="Go"
|
||||||
ReturnCommand="{Binding SubmitCommand}" />
|
ReturnCommand="{Binding SubmitCommand}"
|
||||||
|
AutomationId="FolderNameEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|||||||
@@ -31,7 +31,8 @@
|
|||||||
Margin="20, 0"
|
Margin="20, 0"
|
||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
HorizontalOptions="CenterAndExpand"
|
HorizontalOptions="CenterAndExpand"
|
||||||
HorizontalTextAlignment="Center"></Label>
|
HorizontalTextAlignment="Center"
|
||||||
|
AutomationId="NoFoldersLabel"></Label>
|
||||||
<controls:ExtendedCollectionView
|
<controls:ExtendedCollectionView
|
||||||
IsVisible="{Binding ShowNoData, Converter={StaticResource inverseBool}}"
|
IsVisible="{Binding ShowNoData, Converter={StaticResource inverseBool}}"
|
||||||
ItemsSource="{Binding Folders}"
|
ItemsSource="{Binding Folders}"
|
||||||
@@ -44,10 +45,12 @@
|
|||||||
<DataTemplate x:DataType="views:FolderView">
|
<DataTemplate x:DataType="views:FolderView">
|
||||||
<controls:ExtendedStackLayout
|
<controls:ExtendedStackLayout
|
||||||
StyleClass="list-row, list-row-platform"
|
StyleClass="list-row, list-row-platform"
|
||||||
Padding="10">
|
Padding="10"
|
||||||
|
AutomationId="FolderCell">
|
||||||
<Label LineBreakMode="TailTruncation"
|
<Label LineBreakMode="TailTruncation"
|
||||||
StyleClass="list-title, list-title-platform"
|
StyleClass="list-title, list-title-platform"
|
||||||
Text="{Binding Name, Mode=OneWay}" />
|
Text="{Binding Name, Mode=OneWay}"
|
||||||
|
AutomationId="FolderName" />
|
||||||
</controls:ExtendedStackLayout>
|
</controls:ExtendedStackLayout>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</CollectionView.ItemTemplate>
|
</CollectionView.ItemTemplate>
|
||||||
|
|||||||
@@ -27,7 +27,8 @@
|
|||||||
x:Name="_themePicker"
|
x:Name="_themePicker"
|
||||||
ItemsSource="{Binding ThemeOptions, Mode=OneTime}"
|
ItemsSource="{Binding ThemeOptions, Mode=OneTime}"
|
||||||
SelectedIndex="{Binding ThemeSelectedIndex}"
|
SelectedIndex="{Binding ThemeSelectedIndex}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ThemeSelectorPicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Label
|
<Label
|
||||||
StyleClass="box-footer-label"
|
StyleClass="box-footer-label"
|
||||||
@@ -44,7 +45,8 @@
|
|||||||
x:Name="_autoDarkThemePicker"
|
x:Name="_autoDarkThemePicker"
|
||||||
ItemsSource="{Binding AutoDarkThemeOptions, Mode=OneTime}"
|
ItemsSource="{Binding AutoDarkThemeOptions, Mode=OneTime}"
|
||||||
SelectedIndex="{Binding AutoDarkThemeSelectedIndex}"
|
SelectedIndex="{Binding AutoDarkThemeSelectedIndex}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="DefaultDarkThemePicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Label
|
<Label
|
||||||
StyleClass="box-footer-label"
|
StyleClass="box-footer-label"
|
||||||
@@ -59,7 +61,8 @@
|
|||||||
x:Name="_uriMatchPicker"
|
x:Name="_uriMatchPicker"
|
||||||
ItemsSource="{Binding UriMatchOptions, Mode=OneTime}"
|
ItemsSource="{Binding UriMatchOptions, Mode=OneTime}"
|
||||||
SelectedIndex="{Binding UriMatchSelectedIndex}"
|
SelectedIndex="{Binding UriMatchSelectedIndex}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="DefaultUriMatchDetectionPicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n DefaultUriMatchDetectionDescription}"
|
Text="{u:I18n DefaultUriMatchDetectionDescription}"
|
||||||
@@ -74,7 +77,8 @@
|
|||||||
x:Name="_clearClipboardPicker"
|
x:Name="_clearClipboardPicker"
|
||||||
ItemsSource="{Binding ClearClipboardOptions, Mode=OneTime}"
|
ItemsSource="{Binding ClearClipboardOptions, Mode=OneTime}"
|
||||||
SelectedIndex="{Binding ClearClipboardSelectedIndex}"
|
SelectedIndex="{Binding ClearClipboardSelectedIndex}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ClearClipboardPicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n ClearClipboardDescription}"
|
Text="{u:I18n ClearClipboardDescription}"
|
||||||
@@ -90,7 +94,8 @@
|
|||||||
ItemsSource="{Binding LocalesOptions, Mode=OneTime}"
|
ItemsSource="{Binding LocalesOptions, Mode=OneTime}"
|
||||||
SelectedItem="{Binding SelectedLocale}"
|
SelectedItem="{Binding SelectedLocale}"
|
||||||
ItemDisplayBinding="{Binding Value}"
|
ItemDisplayBinding="{Binding Value}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="LanguagePicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n LanguageChangeRequiresAppRestart}"
|
Text="{u:I18n LanguageChangeRequiresAppRestart}"
|
||||||
@@ -105,7 +110,8 @@
|
|||||||
<Switch
|
<Switch
|
||||||
IsToggled="{Binding AutoTotpCopy}"
|
IsToggled="{Binding AutoTotpCopy}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End" />
|
HorizontalOptions="End"
|
||||||
|
AutomationId="CopyTotpAutomaticallyToggle" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n CopyTotpAutomaticallyDescription}"
|
Text="{u:I18n CopyTotpAutomaticallyDescription}"
|
||||||
@@ -120,7 +126,8 @@
|
|||||||
<Switch
|
<Switch
|
||||||
IsToggled="{Binding Favicon}"
|
IsToggled="{Binding Favicon}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End" />
|
HorizontalOptions="End"
|
||||||
|
AutomationId="ShowWebsiteIconsToggle" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n ShowWebsiteIconsDescription}"
|
Text="{u:I18n ShowWebsiteIconsDescription}"
|
||||||
|
|||||||
@@ -32,19 +32,21 @@
|
|||||||
StyleClass="text-muted, text-sm, text-bold"
|
StyleClass="text-muted, text-sm, text-bold"
|
||||||
HorizontalTextAlignment="Center" />
|
HorizontalTextAlignment="Center" />
|
||||||
</Frame>
|
</Frame>
|
||||||
<Label IsVisible="{Binding UseFrame, Converter={StaticResource inverseBool}}"
|
<controls:CustomLabel IsVisible="{Binding UseFrame, Converter={StaticResource inverseBool}}"
|
||||||
Text="{Binding Name, Mode=OneWay}"
|
Text="{Binding Name, Mode=OneWay}"
|
||||||
LineBreakMode="{Binding LineBreakMode}"
|
LineBreakMode="{Binding LineBreakMode}"
|
||||||
HorizontalOptions="StartAndExpand"
|
HorizontalOptions="StartAndExpand"
|
||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
StyleClass="list-title"/>
|
StyleClass="list-title"
|
||||||
<Label Text="{Binding SubLabel, Mode=OneWay}"
|
AutomationId="{Binding AutomationIdSettingName}" />
|
||||||
|
<controls:CustomLabel Text="{Binding SubLabel, Mode=OneWay}"
|
||||||
IsVisible="{Binding ShowSubLabel}"
|
IsVisible="{Binding ShowSubLabel}"
|
||||||
HorizontalOptions="End"
|
HorizontalOptions="End"
|
||||||
HorizontalTextAlignment="End"
|
HorizontalTextAlignment="End"
|
||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
TextColor="{Binding SubLabelColor}"
|
TextColor="{Binding SubLabelColor}"
|
||||||
StyleClass="list-sub" />
|
StyleClass="list-sub"
|
||||||
|
AutomationId="{Binding AutomationIdSettingStatus}" />
|
||||||
</controls:ExtendedStackLayout>
|
</controls:ExtendedStackLayout>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
<DataTemplate
|
<DataTemplate
|
||||||
@@ -57,7 +59,8 @@
|
|||||||
Padding="10"
|
Padding="10"
|
||||||
HasShadow="False"
|
HasShadow="False"
|
||||||
BackgroundColor="Transparent"
|
BackgroundColor="Transparent"
|
||||||
BorderColor="{DynamicResource PrimaryColor}">
|
BorderColor="{DynamicResource PrimaryColor}"
|
||||||
|
AutomationId="SettingActivePolicyTextLabel">
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Name, Mode=OneWay}"
|
Text="{Binding Name, Mode=OneWay}"
|
||||||
StyleClass="text-muted, text-sm, text-bold"
|
StyleClass="text-muted, text-sm, text-bold"
|
||||||
@@ -75,7 +78,8 @@
|
|||||||
VerticalOptions="Center"
|
VerticalOptions="Center"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
TextColor="{Binding SubLabelColor}"
|
TextColor="{Binding SubLabelColor}"
|
||||||
StyleClass="list-sub" Margin="-5"/>
|
StyleClass="list-sub" Margin="-5"
|
||||||
|
AutomationId="SettingCustomVaultTimeoutPicker" />
|
||||||
<controls:ExtendedStackLayout.GestureRecognizers>
|
<controls:ExtendedStackLayout.GestureRecognizers>
|
||||||
<TapGestureRecognizer Tapped="ActivateTimePicker"/>
|
<TapGestureRecognizer Tapped="ActivateTimePicker"/>
|
||||||
</controls:ExtendedStackLayout.GestureRecognizers>
|
</controls:ExtendedStackLayout.GestureRecognizers>
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Bit.App.Resources;
|
using Bit.App.Resources;
|
||||||
using Bit.App.Utilities;
|
using Bit.App.Utilities;
|
||||||
|
using Bit.App.Utilities.Automation;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
@@ -22,5 +24,29 @@ namespace Bit.App.Pages
|
|||||||
public Color SubLabelColor => SubLabelTextEnabled ?
|
public Color SubLabelColor => SubLabelTextEnabled ?
|
||||||
ThemeManager.GetResourceColor("SuccessColor") :
|
ThemeManager.GetResourceColor("SuccessColor") :
|
||||||
ThemeManager.GetResourceColor("MutedColor");
|
ThemeManager.GetResourceColor("MutedColor");
|
||||||
|
|
||||||
|
public string AutomationIdSettingName
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return AutomationIdsHelper.AddSuffixFor(
|
||||||
|
UseFrame ? "EnabledPolicy"
|
||||||
|
: AutomationIdsHelper.ToEnglishTitleCase(Name)
|
||||||
|
, SuffixType.Cell);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string AutomationIdSettingStatus
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (UseFrame)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return AutomationIdsHelper.AddSuffixFor(AutomationIdsHelper.ToEnglishTitleCase(Name), SuffixType.SettingValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,23 +33,25 @@
|
|||||||
<StackLayout StyleClass="box">
|
<StackLayout StyleClass="box">
|
||||||
<StackLayout StyleClass="box-row" Padding="10, 20"
|
<StackLayout StyleClass="box-row" Padding="10, 20"
|
||||||
IsVisible="{Binding HasAttachments, Converter={StaticResource inverseBool}}">
|
IsVisible="{Binding HasAttachments, Converter={StaticResource inverseBool}}">
|
||||||
<Label Text="{u:I18n NoAttachments}" HorizontalTextAlignment="Center" />
|
<Label Text="{u:I18n NoAttachments}" HorizontalTextAlignment="Center" AutomationId="NoAttachmentsLabel" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<controls:RepeaterView ItemsSource="{Binding Attachments}" IsVisible="{Binding HasAttachments}">
|
<controls:RepeaterView ItemsSource="{Binding Attachments}" IsVisible="{Binding HasAttachments}" AutomationId="AttachmentsList">
|
||||||
<controls:RepeaterView.ItemTemplate>
|
<controls:RepeaterView.ItemTemplate>
|
||||||
<DataTemplate x:DataType="views:AttachmentView">
|
<DataTemplate x:DataType="views:AttachmentView">
|
||||||
<StackLayout Spacing="0" Padding="0">
|
<StackLayout Spacing="0" Padding="0">
|
||||||
<StackLayout Orientation="Horizontal" StyleClass="box-row" Spacing="10">
|
<StackLayout Orientation="Horizontal" StyleClass="box-row" Spacing="10" AutomationId="AttachmentRow">
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding FileName, Mode=OneWay}"
|
Text="{Binding FileName, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
VerticalTextAlignment="Center"
|
VerticalTextAlignment="Center"
|
||||||
HorizontalOptions="StartAndExpand" />
|
HorizontalOptions="StartAndExpand"
|
||||||
|
AutomationId="AttachmentFileNameLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding SizeName, Mode=OneWay}"
|
Text="{Binding SizeName, Mode=OneWay}"
|
||||||
StyleClass="box-sub-label"
|
StyleClass="box-sub-label"
|
||||||
HorizontalTextAlignment="End"
|
HorizontalTextAlignment="End"
|
||||||
VerticalTextAlignment="Center" />
|
VerticalTextAlignment="Center"
|
||||||
|
AutomationId="AttachmentFileSizeLabel" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Trash}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Trash}}"
|
||||||
@@ -57,7 +59,8 @@
|
|||||||
CommandParameter="{Binding .}"
|
CommandParameter="{Binding .}"
|
||||||
VerticalOptions="Center"
|
VerticalOptions="Center"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Delete}" />
|
AutomationProperties.Name="{u:I18n Delete}"
|
||||||
|
AutomationId="AttachmentDeleteButton" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
@@ -77,17 +80,20 @@
|
|||||||
LineBreakMode="CharacterWrap"
|
LineBreakMode="CharacterWrap"
|
||||||
StyleClass="text-sm, text-muted"
|
StyleClass="text-sm, text-muted"
|
||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
HorizontalTextAlignment="Center" />
|
HorizontalTextAlignment="Center"
|
||||||
|
AutomationId="NoFileChosenLabel" />
|
||||||
<Label
|
<Label
|
||||||
IsVisible="{Binding FileName, Converter={StaticResource notNull}}"
|
IsVisible="{Binding FileName, Converter={StaticResource notNull}}"
|
||||||
Text="{Binding FileName}"
|
Text="{Binding FileName}"
|
||||||
LineBreakMode="CharacterWrap"
|
LineBreakMode="CharacterWrap"
|
||||||
StyleClass="text-sm, text-muted"
|
StyleClass="text-sm, text-muted"
|
||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
HorizontalTextAlignment="Center" />
|
HorizontalTextAlignment="Center"
|
||||||
|
AutomationId="NewAttachmentNameLabel" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Button Text="{u:I18n ChooseFile}" StyleClass="box-button-row"
|
<Button Text="{u:I18n ChooseFile}" StyleClass="box-button-row"
|
||||||
Clicked="ChooseFile_Clicked"></Button>
|
Clicked="ChooseFile_Clicked"
|
||||||
|
AutomationId="ChooseFileButton"></Button>
|
||||||
<Label
|
<Label
|
||||||
Margin="0, 10, 0, 0"
|
Margin="0, 10, 0, 0"
|
||||||
Text="{u:I18n MaxFileSize}"
|
Text="{u:I18n MaxFileSize}"
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using Bit.App.Abstractions;
|
using Bit.App.Abstractions;
|
||||||
@@ -32,7 +31,6 @@ namespace Bit.App.Pages
|
|||||||
private bool _hasUpdatedKey;
|
private bool _hasUpdatedKey;
|
||||||
private bool _canAccessAttachments;
|
private bool _canAccessAttachments;
|
||||||
private string _fileName;
|
private string _fileName;
|
||||||
private CancellationTokenSource _uploadCts;
|
|
||||||
|
|
||||||
public AttachmentsPageViewModel()
|
public AttachmentsPageViewModel()
|
||||||
{
|
{
|
||||||
@@ -121,15 +119,11 @@ namespace Bit.App.Pages
|
|||||||
AppResources.AnErrorHasOccurred);
|
AppResources.AnErrorHasOccurred);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
_uploadCts = new CancellationTokenSource();
|
|
||||||
var uploadCts = _uploadCts;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await _deviceActionService.ShowLoadingAsync(AppResources.Saving, uploadCts);
|
await _deviceActionService.ShowLoadingAsync(AppResources.Saving);
|
||||||
_cipherDomain = await _cipherService.SaveAttachmentRawWithServerAsync(
|
_cipherDomain = await _cipherService.SaveAttachmentRawWithServerAsync(
|
||||||
_cipherDomain, FileName, FileData, uploadCts.Token);
|
_cipherDomain, FileName, FileData);
|
||||||
Cipher = await _cipherDomain.DecryptAsync();
|
Cipher = await _cipherDomain.DecryptAsync();
|
||||||
await _deviceActionService.HideLoadingAsync();
|
await _deviceActionService.HideLoadingAsync();
|
||||||
_platformUtilsService.ShowToast("success", null, AppResources.AttachementAdded);
|
_platformUtilsService.ShowToast("success", null, AppResources.AttachementAdded);
|
||||||
@@ -138,11 +132,6 @@ namespace Bit.App.Pages
|
|||||||
FileName = null;
|
FileName = null;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (OperationCanceledException)
|
|
||||||
{
|
|
||||||
await _deviceActionService.HideLoadingAsync();
|
|
||||||
await _platformUtilsService.ShowDialogAsync(AppResources.UploadHasBeenCanceled, AppResources.Attachments);
|
|
||||||
}
|
|
||||||
catch (ApiException e)
|
catch (ApiException e)
|
||||||
{
|
{
|
||||||
_logger.Exception(e);
|
_logger.Exception(e);
|
||||||
|
|||||||
@@ -57,16 +57,16 @@
|
|||||||
x:Key="deleteItem" />
|
x:Key="deleteItem" />
|
||||||
|
|
||||||
<DataTemplate x:Key="TextCustomFieldDataTemplate">
|
<DataTemplate x:Key="TextCustomFieldDataTemplate">
|
||||||
<il:TextCustomFieldItemLayout />
|
<il:TextCustomFieldItemLayout AutomationId="TextCustomFieldItem" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
<DataTemplate x:Key="BooleanCustomFieldDataTemplate">
|
<DataTemplate x:Key="BooleanCustomFieldDataTemplate">
|
||||||
<il:BooleanCustomFieldItemLayout />
|
<il:BooleanCustomFieldItemLayout AutomationId="BooleanCustomFieldItem" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
<DataTemplate x:Key="HiddenCustomFieldDataTemplate">
|
<DataTemplate x:Key="HiddenCustomFieldDataTemplate">
|
||||||
<il:HiddenCustomFieldItemLayout />
|
<il:HiddenCustomFieldItemLayout AutomationId="HiddenCustomFieldItem" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
<DataTemplate x:Key="LinkedCustomFieldDataTemplate">
|
<DataTemplate x:Key="LinkedCustomFieldDataTemplate">
|
||||||
<il:LinkedCustomFieldItemLayout />
|
<il:LinkedCustomFieldItemLayout AutomationId="LinkedCustomFieldItem" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
<dts:CustomFieldItemTemplateSelector x:Key="CustomFieldItemTemplateSelector"
|
<dts:CustomFieldItemTemplateSelector x:Key="CustomFieldItemTemplateSelector"
|
||||||
@@ -100,7 +100,8 @@
|
|||||||
<Label
|
<Label
|
||||||
Text="{u:I18n PersonalOwnershipPolicyInEffect}"
|
Text="{u:I18n PersonalOwnershipPolicyInEffect}"
|
||||||
StyleClass="text-muted, text-sm, text-bold"
|
StyleClass="text-muted, text-sm, text-bold"
|
||||||
HorizontalTextAlignment="Center" />
|
HorizontalTextAlignment="Center"
|
||||||
|
AutomationId="PersonalOwnershipPolicyLabel"/>
|
||||||
</Frame>
|
</Frame>
|
||||||
</Grid>
|
</Grid>
|
||||||
<StackLayout StyleClass="box-row-header">
|
<StackLayout StyleClass="box-row-header">
|
||||||
@@ -116,7 +117,8 @@
|
|||||||
x:Name="_typePicker"
|
x:Name="_typePicker"
|
||||||
ItemsSource="{Binding TypeOptions, Mode=OneTime}"
|
ItemsSource="{Binding TypeOptions, Mode=OneTime}"
|
||||||
SelectedIndex="{Binding TypeSelectedIndex}"
|
SelectedIndex="{Binding TypeSelectedIndex}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemTypePicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -125,7 +127,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_nameEntry"
|
x:Name="_nameEntry"
|
||||||
Text="{Binding Cipher.Name}"
|
Text="{Binding Cipher.Name}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n Name}"
|
||||||
|
AutomationId="ItemNameEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout IsVisible="{Binding IsLogin}" Spacing="0" Padding="0">
|
<StackLayout IsVisible="{Binding IsLogin}" Spacing="0" Padding="0">
|
||||||
<Grid StyleClass="box-row, box-row-input"
|
<Grid StyleClass="box-row, box-row-input"
|
||||||
@@ -138,7 +143,10 @@
|
|||||||
x:Name="_loginUsernameEntry"
|
x:Name="_loginUsernameEntry"
|
||||||
Text="{Binding Cipher.Login.Username}"
|
Text="{Binding Cipher.Login.Username}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Grid.Row="1"/>
|
Grid.Row="1"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n Username}"
|
||||||
|
AutomationId="LoginUsernameEntry" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Generate}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Generate}}"
|
||||||
@@ -146,7 +154,8 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n GenerateUsername}" />
|
AutomationProperties.Name="{u:I18n GenerateUsername}"
|
||||||
|
AutomationId="GenerateUsernameButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid StyleClass="box-row, box-row-input">
|
<Grid StyleClass="box-row, box-row-input">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
@@ -174,7 +183,10 @@
|
|||||||
IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}"
|
IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}"
|
||||||
IsSpellCheckEnabled="False"
|
IsSpellCheckEnabled="False"
|
||||||
IsTextPredictionEnabled="False"
|
IsTextPredictionEnabled="False"
|
||||||
IsEnabled="{Binding Cipher.ViewPassword}"/>
|
IsEnabled="{Binding Cipher.ViewPassword}"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n Password}"
|
||||||
|
AutomationId="LoginPasswordEntry" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.CheckCircle}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.CheckCircle}}"
|
||||||
@@ -184,7 +196,8 @@
|
|||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n CheckPassword}"
|
AutomationProperties.Name="{u:I18n CheckPassword}"
|
||||||
IsVisible="{Binding Cipher.ViewPassword}" />
|
IsVisible="{Binding Cipher.ViewPassword}"
|
||||||
|
AutomationId="CheckPasswordButton" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding ShowPasswordIcon}"
|
Text="{Binding ShowPasswordIcon}"
|
||||||
@@ -195,7 +208,8 @@
|
|||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
||||||
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"
|
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"
|
||||||
IsVisible="{Binding Cipher.ViewPassword}" />
|
IsVisible="{Binding Cipher.ViewPassword}"
|
||||||
|
AutomationId="ViewPasswordButton" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Generate}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Generate}}"
|
||||||
@@ -205,7 +219,8 @@
|
|||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n GeneratePassword}"
|
AutomationProperties.Name="{u:I18n GeneratePassword}"
|
||||||
IsVisible="{Binding Cipher.ViewPassword}" />
|
IsVisible="{Binding Cipher.ViewPassword}"
|
||||||
|
AutomationId="RegeneratePasswordButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<Grid StyleClass="box-row, box-row-input">
|
<Grid StyleClass="box-row, box-row-input">
|
||||||
@@ -241,7 +256,8 @@
|
|||||||
Padding="0,15"
|
Padding="0,15"
|
||||||
HorizontalOptions="Center"
|
HorizontalOptions="Center"
|
||||||
VerticalOptions="FillAndExpand"
|
VerticalOptions="FillAndExpand"
|
||||||
VerticalTextAlignment="Center" />
|
VerticalTextAlignment="Center"
|
||||||
|
AutomationId="SetupTotpButton" />
|
||||||
</Frame>
|
</Frame>
|
||||||
<controls:MonoEntry
|
<controls:MonoEntry
|
||||||
x:Name="_loginTotpEntry"
|
x:Name="_loginTotpEntry"
|
||||||
@@ -254,7 +270,10 @@
|
|||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Grid.ColumnSpan="{Binding TotpColumnSpan}" />
|
Grid.ColumnSpan="{Binding TotpColumnSpan}"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n AuthenticatorKey}"
|
||||||
|
AutomationId="LoginTotpEntry" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
||||||
@@ -262,7 +281,10 @@
|
|||||||
IsVisible="{Binding HasTotpValue}"
|
IsVisible="{Binding HasTotpValue}"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2" />
|
Grid.RowSpan="2"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n CopyTotp}"
|
||||||
|
AutomationId="CopyTotpValueButton" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Camera}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Camera}}"
|
||||||
@@ -272,7 +294,8 @@
|
|||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
IsVisible="{Binding HasTotpValue}"
|
IsVisible="{Binding HasTotpValue}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ScanQrTitle}" />
|
AutomationProperties.Name="{u:I18n ScanQrTitle}"
|
||||||
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout IsVisible="{Binding IsCard}" Spacing="0" Padding="0">
|
<StackLayout IsVisible="{Binding IsCard}" Spacing="0" Padding="0">
|
||||||
@@ -283,7 +306,8 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_cardholderNameEntry"
|
x:Name="_cardholderNameEntry"
|
||||||
Text="{Binding Cipher.Card.CardholderName}"
|
Text="{Binding Cipher.Card.CardholderName}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="CardholderNameEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Grid StyleClass="box-row, box-row-input">
|
<Grid StyleClass="box-row, box-row-input">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
@@ -307,7 +331,10 @@
|
|||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
IsPassword="{Binding ShowCardNumber, Converter={StaticResource inverseBool}}"
|
IsPassword="{Binding ShowCardNumber, Converter={StaticResource inverseBool}}"
|
||||||
IsSpellCheckEnabled="False"
|
IsSpellCheckEnabled="False"
|
||||||
IsTextPredictionEnabled="False" />
|
IsTextPredictionEnabled="False"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n Number}"
|
||||||
|
AutomationId="CardNumberEntry" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding ShowCardNumberIcon}"
|
Text="{Binding ShowCardNumberIcon}"
|
||||||
@@ -316,7 +343,8 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}" />
|
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
||||||
|
AutomationId="ShowCardNumberButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -326,7 +354,8 @@
|
|||||||
x:Name="_cardBrandPicker"
|
x:Name="_cardBrandPicker"
|
||||||
ItemsSource="{Binding CardBrandOptions, Mode=OneTime}"
|
ItemsSource="{Binding CardBrandOptions, Mode=OneTime}"
|
||||||
SelectedIndex="{Binding CardBrandSelectedIndex}"
|
SelectedIndex="{Binding CardBrandSelectedIndex}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="CardBrandPicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -336,7 +365,8 @@
|
|||||||
x:Name="_cardExpMonthPicker"
|
x:Name="_cardExpMonthPicker"
|
||||||
ItemsSource="{Binding CardExpMonthOptions, Mode=OneTime}"
|
ItemsSource="{Binding CardExpMonthOptions, Mode=OneTime}"
|
||||||
SelectedIndex="{Binding CardExpMonthSelectedIndex}"
|
SelectedIndex="{Binding CardExpMonthSelectedIndex}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="CardExpirationMonthPicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -346,7 +376,10 @@
|
|||||||
x:Name="_cardExpYearEntry"
|
x:Name="_cardExpYearEntry"
|
||||||
Text="{Binding Cipher.Card.ExpYear}"
|
Text="{Binding Cipher.Card.ExpYear}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Keyboard="Numeric" />
|
Keyboard="Numeric"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n ExpirationYear}"
|
||||||
|
AutomationId="CardExpirationYearEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<Grid StyleClass="box-row, box-row-input">
|
<Grid StyleClass="box-row, box-row-input">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
@@ -371,7 +404,10 @@
|
|||||||
Keyboard="Numeric"
|
Keyboard="Numeric"
|
||||||
IsPassword="{Binding ShowCardCode, Converter={StaticResource inverseBool}}"
|
IsPassword="{Binding ShowCardCode, Converter={StaticResource inverseBool}}"
|
||||||
IsSpellCheckEnabled="False"
|
IsSpellCheckEnabled="False"
|
||||||
IsTextPredictionEnabled="False" />
|
IsTextPredictionEnabled="False"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n SecurityCode}"
|
||||||
|
AutomationId="CardSecurityCodeEntry" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding ShowCardCodeIcon}"
|
Text="{Binding ShowCardCodeIcon}"
|
||||||
@@ -380,7 +416,8 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}" />
|
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
||||||
|
AutomationId="CardShowSecurityCodeButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout IsVisible="{Binding IsIdentity}" Spacing="0" Padding="0">
|
<StackLayout IsVisible="{Binding IsIdentity}" Spacing="0" Padding="0">
|
||||||
@@ -392,7 +429,8 @@
|
|||||||
x:Name="_identityTitlePicker"
|
x:Name="_identityTitlePicker"
|
||||||
ItemsSource="{Binding IdentityTitleOptions, Mode=OneTime}"
|
ItemsSource="{Binding IdentityTitleOptions, Mode=OneTime}"
|
||||||
SelectedIndex="{Binding IdentityTitleSelectedIndex}"
|
SelectedIndex="{Binding IdentityTitleSelectedIndex}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="IdentityTitlePicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -401,7 +439,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityFirstNameEntry"
|
x:Name="_identityFirstNameEntry"
|
||||||
Text="{Binding Cipher.Identity.FirstName}"
|
Text="{Binding Cipher.Identity.FirstName}"
|
||||||
StyleClass="box-value,capitalize-word-input"/>
|
StyleClass="box-value,capitalize-word-input"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n FirstName}"
|
||||||
|
AutomationId="IdentityFirstNameEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -410,7 +451,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityMiddleNameEntry"
|
x:Name="_identityMiddleNameEntry"
|
||||||
Text="{Binding Cipher.Identity.MiddleName}"
|
Text="{Binding Cipher.Identity.MiddleName}"
|
||||||
StyleClass="box-value,capitalize-word-input" />
|
StyleClass="box-value,capitalize-word-input"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n MiddleName}"
|
||||||
|
AutomationId="IdentityMiddleNameEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -419,7 +463,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityLastNameEntry"
|
x:Name="_identityLastNameEntry"
|
||||||
Text="{Binding Cipher.Identity.LastName}"
|
Text="{Binding Cipher.Identity.LastName}"
|
||||||
StyleClass="box-value,capitalize-word-input" />
|
StyleClass="box-value,capitalize-word-input"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n LastName}"
|
||||||
|
AutomationId="IdentityLastNameEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -428,7 +475,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityUsernameEntry"
|
x:Name="_identityUsernameEntry"
|
||||||
Text="{Binding Cipher.Identity.Username}"
|
Text="{Binding Cipher.Identity.Username}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n Username}"
|
||||||
|
AutomationId="IdentityUsernameEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -437,7 +487,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityCompanyEntry"
|
x:Name="_identityCompanyEntry"
|
||||||
Text="{Binding Cipher.Identity.Company}"
|
Text="{Binding Cipher.Identity.Company}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n Company}"
|
||||||
|
AutomationId="IdentityCompanyEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -446,7 +499,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identitySsnEntry"
|
x:Name="_identitySsnEntry"
|
||||||
Text="{Binding Cipher.Identity.SSN}"
|
Text="{Binding Cipher.Identity.SSN}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n SSN}"
|
||||||
|
AutomationId="IdentitySsnEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -455,7 +511,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityPassportNumberEntry"
|
x:Name="_identityPassportNumberEntry"
|
||||||
Text="{Binding Cipher.Identity.PassportNumber}"
|
Text="{Binding Cipher.Identity.PassportNumber}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n PassportNumber}"
|
||||||
|
AutomationId="IdentityPassportNumberEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -464,7 +523,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityLicenseNumberEntry"
|
x:Name="_identityLicenseNumberEntry"
|
||||||
Text="{Binding Cipher.Identity.LicenseNumber}"
|
Text="{Binding Cipher.Identity.LicenseNumber}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n LicenseNumber}"
|
||||||
|
AutomationId="IdentityLicenseNumberEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -474,7 +536,10 @@
|
|||||||
x:Name="_identityEmailEntry"
|
x:Name="_identityEmailEntry"
|
||||||
Keyboard="Email"
|
Keyboard="Email"
|
||||||
Text="{Binding Cipher.Identity.Email}"
|
Text="{Binding Cipher.Identity.Email}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n Email}"
|
||||||
|
AutomationId="IdentityEmailEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -484,7 +549,10 @@
|
|||||||
x:Name="_identityPhoneEntry"
|
x:Name="_identityPhoneEntry"
|
||||||
Text="{Binding Cipher.Identity.Phone}"
|
Text="{Binding Cipher.Identity.Phone}"
|
||||||
Keyboard="Telephone"
|
Keyboard="Telephone"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n Phone}"
|
||||||
|
AutomationId="IdentityPhoneEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -493,7 +561,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityAddress1Entry"
|
x:Name="_identityAddress1Entry"
|
||||||
Text="{Binding Cipher.Identity.Address1}"
|
Text="{Binding Cipher.Identity.Address1}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n Address1}"
|
||||||
|
AutomationId="IdentityAddressOneEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -502,7 +573,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityAddress2Entry"
|
x:Name="_identityAddress2Entry"
|
||||||
Text="{Binding Cipher.Identity.Address2}"
|
Text="{Binding Cipher.Identity.Address2}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n Address2}"
|
||||||
|
AutomationId="IdentityAddressTwoEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -511,7 +585,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityAddress3Entry"
|
x:Name="_identityAddress3Entry"
|
||||||
Text="{Binding Cipher.Identity.Address3}"
|
Text="{Binding Cipher.Identity.Address3}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n Address3}"
|
||||||
|
AutomationId="IdentityAddressThreeEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -520,7 +597,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityCityEntry"
|
x:Name="_identityCityEntry"
|
||||||
Text="{Binding Cipher.Identity.City}"
|
Text="{Binding Cipher.Identity.City}"
|
||||||
StyleClass="box-value,capitalize-sentence-input" />
|
StyleClass="box-value,capitalize-sentence-input"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n CityTown}"
|
||||||
|
AutomationId="IdentityCityEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -529,7 +609,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityStateEntry"
|
x:Name="_identityStateEntry"
|
||||||
Text="{Binding Cipher.Identity.State}"
|
Text="{Binding Cipher.Identity.State}"
|
||||||
StyleClass="box-value,capitalize-sentence-input" />
|
StyleClass="box-value,capitalize-sentence-input"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n StateProvince}"
|
||||||
|
AutomationId="IdentityStateEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -538,7 +621,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityPostalCodeEntry"
|
x:Name="_identityPostalCodeEntry"
|
||||||
Text="{Binding Cipher.Identity.PostalCode}"
|
Text="{Binding Cipher.Identity.PostalCode}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n ZipPostalCode}"
|
||||||
|
AutomationId="IdentityPostalCodeEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-input">
|
<StackLayout StyleClass="box-row, box-row-input">
|
||||||
<Label
|
<Label
|
||||||
@@ -547,7 +633,10 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_identityCountryEntry"
|
x:Name="_identityCountryEntry"
|
||||||
Text="{Binding Cipher.Identity.Country}"
|
Text="{Binding Cipher.Identity.Country}"
|
||||||
StyleClass="box-value,capitalize-sentence-input" />
|
StyleClass="box-value,capitalize-sentence-input"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n Country}"
|
||||||
|
AutomationId="IdentityCountryEntry" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
@@ -559,7 +648,7 @@
|
|||||||
<controls:RepeaterView ItemsSource="{Binding Uris}">
|
<controls:RepeaterView ItemsSource="{Binding Uris}">
|
||||||
<controls:RepeaterView.ItemTemplate>
|
<controls:RepeaterView.ItemTemplate>
|
||||||
<DataTemplate x:DataType="views:LoginUriView">
|
<DataTemplate x:DataType="views:LoginUriView">
|
||||||
<Grid StyleClass="box-row, box-row-input">
|
<Grid StyleClass="box-row, box-row-input" AutomationId="UriListGrid" >
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
@@ -578,7 +667,10 @@
|
|||||||
Keyboard="Url"
|
Keyboard="Url"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n URI}"
|
||||||
|
AutomationId="LoginUriEntry" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Cog}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Cog}}"
|
||||||
@@ -588,13 +680,15 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Options}" />
|
AutomationProperties.Name="{u:I18n Options}"
|
||||||
|
AutomationId="LoginUriOptionsButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</controls:RepeaterView.ItemTemplate>
|
</controls:RepeaterView.ItemTemplate>
|
||||||
</controls:RepeaterView>
|
</controls:RepeaterView>
|
||||||
<Button Text="{u:I18n NewUri}" StyleClass="box-button-row"
|
<Button Text="{u:I18n NewUri}" StyleClass="box-button-row"
|
||||||
Clicked="NewUri_Clicked"></Button>
|
Clicked="NewUri_Clicked"
|
||||||
|
AutomationId="LoginAddNewUriButton"></Button>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box">
|
<StackLayout StyleClass="box">
|
||||||
<StackLayout StyleClass="box-row-header">
|
<StackLayout StyleClass="box-row-header">
|
||||||
@@ -609,7 +703,8 @@
|
|||||||
x:Name="_folderPicker"
|
x:Name="_folderPicker"
|
||||||
ItemsSource="{Binding FolderOptions, Mode=OneTime}"
|
ItemsSource="{Binding FolderOptions, Mode=OneTime}"
|
||||||
SelectedIndex="{Binding FolderSelectedIndex}"
|
SelectedIndex="{Binding FolderSelectedIndex}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="FolderPicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-switch">
|
<StackLayout StyleClass="box-row, box-row-switch">
|
||||||
<Label
|
<Label
|
||||||
@@ -619,7 +714,8 @@
|
|||||||
<Switch
|
<Switch
|
||||||
IsToggled="{Binding Cipher.Favorite}"
|
IsToggled="{Binding Cipher.Favorite}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End" />
|
HorizontalOptions="End"
|
||||||
|
AutomationId="ItemFavoriteToggle" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout x:Name="_passwordPrompt" StyleClass="box-row, box-row-switch">
|
<StackLayout x:Name="_passwordPrompt" StyleClass="box-row, box-row-switch">
|
||||||
<Label
|
<Label
|
||||||
@@ -631,13 +727,14 @@
|
|||||||
Command="{Binding PasswordPromptHelpCommand}"
|
Command="{Binding PasswordPromptHelpCommand}"
|
||||||
TextColor="{DynamicResource MutedColor}"
|
TextColor="{DynamicResource MutedColor}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
AutomationProperties.Name="{u:I18n MasterPasswordRePromptHelp}"
|
||||||
HorizontalOptions="StartAndExpand" />
|
HorizontalOptions="StartAndExpand" />
|
||||||
<Switch
|
<Switch
|
||||||
IsToggled="{Binding PasswordPrompt}"
|
IsToggled="{Binding PasswordPrompt}"
|
||||||
Toggled="PasswordPrompt_Toggled"
|
Toggled="PasswordPrompt_Toggled"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End" />
|
HorizontalOptions="End"
|
||||||
|
AutomationId="MasterPasswordRepromptToggle" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
@@ -652,7 +749,10 @@
|
|||||||
AutoSize="TextChanges"
|
AutoSize="TextChanges"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
effects:ScrollEnabledEffect.IsScrollEnabled="false"
|
effects:ScrollEnabledEffect.IsScrollEnabled="false"
|
||||||
Text="{Binding Cipher.Notes}">
|
Text="{Binding Cipher.Notes}"
|
||||||
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
|
AutomationProperties.Name="{u:I18n Notes}"
|
||||||
|
AutomationId="ItemNotesEntry">
|
||||||
<Editor.Behaviors>
|
<Editor.Behaviors>
|
||||||
<behaviors:EditorPreventAutoBottomScrollingOnFocusedBehavior ParentScrollView="{x:Reference _scrollView}" />
|
<behaviors:EditorPreventAutoBottomScrollingOnFocusedBehavior ParentScrollView="{x:Reference _scrollView}" />
|
||||||
</Editor.Behaviors>
|
</Editor.Behaviors>
|
||||||
@@ -671,9 +771,11 @@
|
|||||||
<StackLayout
|
<StackLayout
|
||||||
Spacing="0"
|
Spacing="0"
|
||||||
BindableLayout.ItemsSource="{Binding Fields}"
|
BindableLayout.ItemsSource="{Binding Fields}"
|
||||||
BindableLayout.ItemTemplateSelector="{StaticResource CustomFieldItemTemplateSelector}" />
|
BindableLayout.ItemTemplateSelector="{StaticResource CustomFieldItemTemplateSelector}"
|
||||||
|
AutomationId="CustomFieldsList" />
|
||||||
<Button Text="{u:I18n NewCustomField}" StyleClass="box-button-row"
|
<Button Text="{u:I18n NewCustomField}" StyleClass="box-button-row"
|
||||||
Clicked="NewField_Clicked"></Button>
|
Clicked="NewField_Clicked"
|
||||||
|
AutomationId="NewCustomFieldButton"></Button>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box" IsVisible="{Binding ShowOwnershipOptions}">
|
<StackLayout StyleClass="box" IsVisible="{Binding ShowOwnershipOptions}">
|
||||||
<StackLayout StyleClass="box-row-header">
|
<StackLayout StyleClass="box-row-header">
|
||||||
@@ -688,7 +790,8 @@
|
|||||||
x:Name="_ownershipPicker"
|
x:Name="_ownershipPicker"
|
||||||
ItemsSource="{Binding OwnershipOptions, Mode=OneTime}"
|
ItemsSource="{Binding OwnershipOptions, Mode=OneTime}"
|
||||||
SelectedIndex="{Binding OwnershipSelectedIndex}"
|
SelectedIndex="{Binding OwnershipSelectedIndex}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemOwnershipPicker" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box" IsVisible="{Binding ShowCollections}">
|
<StackLayout StyleClass="box" IsVisible="{Binding ShowCollections}">
|
||||||
@@ -699,7 +802,8 @@
|
|||||||
<StackLayout Spacing="0" Padding="0"
|
<StackLayout Spacing="0" Padding="0"
|
||||||
IsVisible="{Binding HasCollections, Converter={StaticResource inverseBool}}">
|
IsVisible="{Binding HasCollections, Converter={StaticResource inverseBool}}">
|
||||||
<StackLayout StyleClass="box-row, box-row-switch">
|
<StackLayout StyleClass="box-row, box-row-switch">
|
||||||
<Label Text="{u:I18n NoCollectionsToList}" />
|
<Label Text="{u:I18n NoCollectionsToList}"
|
||||||
|
AutomationId="NoCollectionsToListLabel" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
@@ -709,15 +813,17 @@
|
|||||||
<controls:RepeaterView.ItemTemplate>
|
<controls:RepeaterView.ItemTemplate>
|
||||||
<DataTemplate x:DataType="pages:CollectionViewModel">
|
<DataTemplate x:DataType="pages:CollectionViewModel">
|
||||||
<StackLayout Spacing="0" Padding="0">
|
<StackLayout Spacing="0" Padding="0">
|
||||||
<StackLayout StyleClass="box-row, box-row-switch">
|
<StackLayout StyleClass="box-row, box-row-switch" AutomationId="CollectionItemCell">
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Collection.Name}"
|
Text="{Binding Collection.Name}"
|
||||||
StyleClass="box-label-regular"
|
StyleClass="box-label-regular"
|
||||||
HorizontalOptions="StartAndExpand" />
|
HorizontalOptions="StartAndExpand"
|
||||||
|
AutomationId="CollectionItemNameLabel" />
|
||||||
<Switch
|
<Switch
|
||||||
IsToggled="{Binding Checked}"
|
IsToggled="{Binding Checked}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
HorizontalOptions="End" />
|
HorizontalOptions="End"
|
||||||
|
AutomationId="CollectionItemSwitch" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
@@ -727,5 +833,4 @@
|
|||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|
||||||
</pages:BaseContentPage>
|
</pages:BaseContentPage>
|
||||||
|
|||||||
@@ -49,16 +49,16 @@
|
|||||||
x:Name="_cloneItem" x:Key="cloneItem" />
|
x:Name="_cloneItem" x:Key="cloneItem" />
|
||||||
|
|
||||||
<DataTemplate x:Key="TextCustomFieldDataTemplate">
|
<DataTemplate x:Key="TextCustomFieldDataTemplate">
|
||||||
<il:TextCustomFieldItemLayout />
|
<il:TextCustomFieldItemLayout AutomationId="TextCustomFieldItem" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
<DataTemplate x:Key="BooleanCustomFieldDataTemplate">
|
<DataTemplate x:Key="BooleanCustomFieldDataTemplate">
|
||||||
<il:BooleanCustomFieldItemLayout />
|
<il:BooleanCustomFieldItemLayout AutomationId="BooleanCustomFieldItem" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
<DataTemplate x:Key="HiddenCustomFieldDataTemplate">
|
<DataTemplate x:Key="HiddenCustomFieldDataTemplate">
|
||||||
<il:HiddenCustomFieldItemLayout />
|
<il:HiddenCustomFieldItemLayout AutomationId="HiddenCustomFieldItem" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
<DataTemplate x:Key="LinkedCustomFieldDataTemplate">
|
<DataTemplate x:Key="LinkedCustomFieldDataTemplate">
|
||||||
<il:LinkedCustomFieldItemLayout />
|
<il:LinkedCustomFieldItemLayout AutomationId="LinkedCustomFieldItem" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
<dts:CustomFieldItemTemplateSelector x:Key="CustomFieldItemTemplateSelector"
|
<dts:CustomFieldItemTemplateSelector x:Key="CustomFieldItemTemplateSelector"
|
||||||
@@ -69,23 +69,26 @@
|
|||||||
|
|
||||||
<ScrollView x:Key="scrollView" x:Name="_scrollView">
|
<ScrollView x:Key="scrollView" x:Name="_scrollView">
|
||||||
<StackLayout Spacing="20" x:Name="_mainLayout">
|
<StackLayout Spacing="20" x:Name="_mainLayout">
|
||||||
<StackLayout StyleClass="box">
|
<StackLayout StyleClass="box" AutomationId="ItemInformationSection">
|
||||||
<StackLayout StyleClass="box-row-header">
|
<StackLayout StyleClass="box-row-header">
|
||||||
<Label Text="{u:I18n ItemInformation, Header=True}"
|
<Label Text="{u:I18n ItemInformation, Header=True}"
|
||||||
StyleClass="box-header, box-header-platform" />
|
StyleClass="box-header, box-header-platform" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row">
|
<StackLayout StyleClass="box-row" AutomationId="ItemRow">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n Name}"
|
Text="{u:I18n Name}"
|
||||||
StyleClass="box-label" />
|
StyleClass="box-label"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Name, Mode=OneWay}"
|
Text="{Binding Cipher.Name, Mode=OneWay}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
<StackLayout IsVisible="{Binding IsLogin}" Spacing="0" Padding="0">
|
<StackLayout IsVisible="{Binding IsLogin}" Spacing="0" Padding="0">
|
||||||
<Grid StyleClass="box-row"
|
<Grid StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Login.Username, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Login.Username, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
@@ -98,12 +101,14 @@
|
|||||||
Text="{u:I18n Username}"
|
Text="{u:I18n Username}"
|
||||||
StyleClass="box-label"
|
StyleClass="box-label"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Login.Username, Mode=OneWay}"
|
Text="{Binding Cipher.Login.Username, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
||||||
@@ -113,12 +118,14 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n CopyUsername}" />
|
AutomationProperties.Name="{u:I18n CopyUsername}"
|
||||||
|
AutomationId="CopyValueButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Login.Username, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Login.Username, Converter={StaticResource stringHasValue}}" />
|
||||||
<Grid StyleClass="box-row"
|
<Grid StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Login.Password, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Login.Password, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
@@ -133,20 +140,23 @@
|
|||||||
Text="{u:I18n Password}"
|
Text="{u:I18n Password}"
|
||||||
StyleClass="box-label"
|
StyleClass="box-label"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<controls:MonoLabel
|
<controls:MonoLabel
|
||||||
Text="{Binding Cipher.Login.MaskedPassword, Mode=OneWay}"
|
Text="{Binding Cipher.Login.MaskedPassword, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
IsVisible="{Binding ShowPassword, Converter={StaticResource inverseBool}}" />
|
IsVisible="{Binding ShowPassword, Converter={StaticResource inverseBool}}"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
<controls:MonoLabel
|
<controls:MonoLabel
|
||||||
Text="{Binding ColoredPassword, Mode=OneWay}"
|
Text="{Binding ColoredPassword, Mode=OneWay}"
|
||||||
StyleClass="box-value, text-html"
|
StyleClass="box-value, text-html"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
LineBreakMode="CharacterWrap"
|
LineBreakMode="CharacterWrap"
|
||||||
IsVisible="{Binding ShowPassword}" />
|
IsVisible="{Binding ShowPassword}"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.CheckCircle}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.CheckCircle}}"
|
||||||
@@ -156,7 +166,8 @@
|
|||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n CheckPassword}"
|
AutomationProperties.Name="{u:I18n CheckPassword}"
|
||||||
IsVisible="{Binding Cipher.ViewPassword}" />
|
IsVisible="{Binding Cipher.ViewPassword}"
|
||||||
|
AutomationId="CheckPasswordButton" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding ShowPasswordIcon}"
|
Text="{Binding ShowPasswordIcon}"
|
||||||
@@ -167,7 +178,8 @@
|
|||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
||||||
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"
|
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"
|
||||||
IsVisible="{Binding Cipher.ViewPassword}" />
|
IsVisible="{Binding Cipher.ViewPassword}"
|
||||||
|
AutomationId="ViewValueButton" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
||||||
@@ -178,11 +190,14 @@
|
|||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n CopyPassword}"
|
AutomationProperties.Name="{u:I18n CopyPassword}"
|
||||||
IsVisible="{Binding Cipher.ViewPassword}" />
|
IsVisible="{Binding Cipher.ViewPassword}"
|
||||||
|
AutomationId="CopyValueButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Login.Password, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Login.Password, Converter={StaticResource stringHasValue}}" />
|
||||||
<Grid StyleClass="box-row" IsVisible="{Binding ShowTotp}">
|
<Grid StyleClass="box-row"
|
||||||
|
IsVisible="{Binding ShowTotp}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
@@ -197,7 +212,8 @@
|
|||||||
Text="{u:I18n VerificationCodeTotp}"
|
Text="{u:I18n VerificationCodeTotp}"
|
||||||
StyleClass="box-label"
|
StyleClass="box-label"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<controls:MonoLabel
|
<controls:MonoLabel
|
||||||
Text="{Binding TotpCodeFormatted, Mode=OneWay}"
|
Text="{Binding TotpCodeFormatted, Mode=OneWay}"
|
||||||
IsVisible="{Binding ShowUpgradePremiumTotpText, Converter={StaticResource inverseBool}}"
|
IsVisible="{Binding ShowUpgradePremiumTotpText, Converter={StaticResource inverseBool}}"
|
||||||
@@ -205,14 +221,16 @@
|
|||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
VerticalTextAlignment="Start"
|
VerticalTextAlignment="Start"
|
||||||
VerticalOptions="Start" />
|
VerticalOptions="Start"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
<controls:CircularProgressbarView
|
<controls:CircularProgressbarView
|
||||||
Progress="{Binding TotpProgress}"
|
Progress="{Binding TotpProgress}"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
VerticalOptions="FillAndExpand" />
|
VerticalOptions="FillAndExpand"
|
||||||
|
AutomationId="LoginTotpProgressBar" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding TotpSec, Mode=OneWay}"
|
Text="{Binding TotpSec, Mode=OneWay}"
|
||||||
Style="{DynamicResource textTotp}"
|
Style="{DynamicResource textTotp}"
|
||||||
@@ -234,7 +252,8 @@
|
|||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n CopyTotp}" />
|
AutomationProperties.Name="{u:I18n CopyTotp}"
|
||||||
|
AutomationId="CopyValueButton" />
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n PremiumSubscriptionRequired}"
|
Text="{u:I18n PremiumSubscriptionRequired}"
|
||||||
StyleClass="box-footer-label"
|
StyleClass="box-footer-label"
|
||||||
@@ -242,24 +261,29 @@
|
|||||||
Margin="0,5,0,2"
|
Margin="0,5,0,2"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
HorizontalOptions="FillAndExpand" />
|
HorizontalOptions="FillAndExpand"
|
||||||
|
AutomationId="ShowUpgradePremiumTotpLabel" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<BoxView StyleClass="box-row-separator" IsVisible="{Binding ShowTotp}" />
|
<BoxView StyleClass="box-row-separator" IsVisible="{Binding ShowTotp}" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout IsVisible="{Binding IsCard}" Spacing="0" Padding="0">
|
<StackLayout IsVisible="{Binding IsCard}" Spacing="0" Padding="0">
|
||||||
<StackLayout StyleClass="box-row"
|
<StackLayout StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Card.CardholderName, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Card.CardholderName, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n CardholderName}"
|
Text="{u:I18n CardholderName}"
|
||||||
StyleClass="box-label" />
|
StyleClass="box-label"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Card.CardholderName, Mode=OneWay}"
|
Text="{Binding Cipher.Card.CardholderName, Mode=OneWay}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Card.CardholderName, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Card.CardholderName, Converter={StaticResource stringHasValue}}" />
|
||||||
<Grid StyleClass="box-row"
|
<Grid StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Card.Number, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Card.Number, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
@@ -273,19 +297,22 @@
|
|||||||
Text="{u:I18n Number}"
|
Text="{u:I18n Number}"
|
||||||
StyleClass="box-label"
|
StyleClass="box-label"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<controls:MonoLabel
|
<controls:MonoLabel
|
||||||
Text="{Binding Cipher.Card.MaskedNumber, Mode=OneWay}"
|
Text="{Binding Cipher.Card.MaskedNumber, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
IsVisible="{Binding ShowCardNumber, Converter={StaticResource inverseBool}}" />
|
IsVisible="{Binding ShowCardNumber, Converter={StaticResource inverseBool}}"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
<controls:MonoLabel
|
<controls:MonoLabel
|
||||||
Text="{Binding Cipher.Card.Number, Mode=OneWay}"
|
Text="{Binding Cipher.Card.Number, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
IsVisible="{Binding ShowCardNumber}" />
|
IsVisible="{Binding ShowCardNumber}"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding ShowCardNumberIcon}"
|
Text="{Binding ShowCardNumberIcon}"
|
||||||
@@ -294,7 +321,8 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}" />
|
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
||||||
|
AutomationId="ShowValueButton" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
||||||
@@ -304,34 +332,42 @@
|
|||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n CopyNumber}" />
|
AutomationProperties.Name="{u:I18n CopyNumber}"
|
||||||
|
AutomationId="CopyValueButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Card.Number, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Card.Number, Converter={StaticResource stringHasValue}}" />
|
||||||
<StackLayout StyleClass="box-row"
|
<StackLayout StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Card.Brand, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Card.Brand, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n Brand}"
|
Text="{u:I18n Brand}"
|
||||||
StyleClass="box-label" />
|
StyleClass="box-label"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Card.Brand, Mode=OneWay}"
|
Text="{Binding Cipher.Card.Brand, Mode=OneWay}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Card.Brand, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Card.Brand, Converter={StaticResource stringHasValue}}" />
|
||||||
<StackLayout StyleClass="box-row"
|
<StackLayout StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Card.Expiration, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Card.Expiration, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n Expiration}"
|
Text="{u:I18n Expiration}"
|
||||||
StyleClass="box-label" />
|
StyleClass="box-label"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Card.Expiration, Mode=OneWay}"
|
Text="{Binding Cipher.Card.Expiration, Mode=OneWay}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Card.Expiration, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Card.Expiration, Converter={StaticResource stringHasValue}}" />
|
||||||
<Grid StyleClass="box-row"
|
<Grid StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Card.Code, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Card.Code, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
@@ -345,19 +381,22 @@
|
|||||||
Text="{u:I18n SecurityCode}"
|
Text="{u:I18n SecurityCode}"
|
||||||
StyleClass="box-label"
|
StyleClass="box-label"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<controls:MonoLabel
|
<controls:MonoLabel
|
||||||
Text="{Binding Cipher.Card.MaskedCode, Mode=OneWay}"
|
Text="{Binding Cipher.Card.MaskedCode, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
IsVisible="{Binding ShowCardCode, Converter={StaticResource inverseBool}}" />
|
IsVisible="{Binding ShowCardCode, Converter={StaticResource inverseBool}}"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
<controls:MonoLabel
|
<controls:MonoLabel
|
||||||
Text="{Binding Cipher.Card.Code, Mode=OneWay}"
|
Text="{Binding Cipher.Card.Code, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
IsVisible="{Binding ShowCardCode}" />
|
IsVisible="{Binding ShowCardCode}"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding ShowCardCodeIcon}"
|
Text="{Binding ShowCardCodeIcon}"
|
||||||
@@ -366,7 +405,8 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n ToggleVisibility}" />
|
AutomationProperties.Name="{u:I18n ToggleVisibility}"
|
||||||
|
AutomationId="ShowValueButton" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
||||||
@@ -376,124 +416,156 @@
|
|||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n CopySecurityCode}" />
|
AutomationProperties.Name="{u:I18n CopySecurityCode}"
|
||||||
|
AutomationId="CopyValueButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Card.Code, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Card.Code, Converter={StaticResource stringHasValue}}" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout IsVisible="{Binding IsIdentity}" Spacing="0" Padding="0">
|
<StackLayout IsVisible="{Binding IsIdentity}" Spacing="0" Padding="0">
|
||||||
<StackLayout StyleClass="box-row"
|
<StackLayout StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Identity.FullName, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Identity.FullName, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n IdentityName}"
|
Text="{u:I18n IdentityName}"
|
||||||
StyleClass="box-label" />
|
StyleClass="box-label"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Identity.FullName, Mode=OneWay}"
|
Text="{Binding Cipher.Identity.FullName, Mode=OneWay}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Identity.FullName, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Identity.FullName, Converter={StaticResource stringHasValue}}" />
|
||||||
<StackLayout StyleClass="box-row"
|
<StackLayout StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Identity.Username, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Identity.Username, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n Username}"
|
Text="{u:I18n Username}"
|
||||||
StyleClass="box-label" />
|
StyleClass="box-label"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Identity.Username, Mode=OneWay}"
|
Text="{Binding Cipher.Identity.Username, Mode=OneWay}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Identity.Username, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Identity.Username, Converter={StaticResource stringHasValue}}" />
|
||||||
<StackLayout StyleClass="box-row"
|
<StackLayout StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Identity.Company, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Identity.Company, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n Company}"
|
Text="{u:I18n Company}"
|
||||||
StyleClass="box-label" />
|
StyleClass="box-label"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Identity.Company, Mode=OneWay}"
|
Text="{Binding Cipher.Identity.Company, Mode=OneWay}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Identity.Company, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Identity.Company, Converter={StaticResource stringHasValue}}" />
|
||||||
<StackLayout StyleClass="box-row"
|
<StackLayout StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Identity.SSN, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Identity.SSN, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n SSN}"
|
Text="{u:I18n SSN}"
|
||||||
StyleClass="box-label" />
|
StyleClass="box-label"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Identity.SSN, Mode=OneWay}"
|
Text="{Binding Cipher.Identity.SSN, Mode=OneWay}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Identity.SSN, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Identity.SSN, Converter={StaticResource stringHasValue}}" />
|
||||||
<StackLayout StyleClass="box-row"
|
<StackLayout StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Identity.PassportNumber, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Identity.PassportNumber, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n PassportNumber}"
|
Text="{u:I18n PassportNumber}"
|
||||||
StyleClass="box-label" />
|
StyleClass="box-label"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Identity.PassportNumber, Mode=OneWay}"
|
Text="{Binding Cipher.Identity.PassportNumber, Mode=OneWay}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Identity.PassportNumber, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Identity.PassportNumber, Converter={StaticResource stringHasValue}}" />
|
||||||
<StackLayout StyleClass="box-row"
|
<StackLayout StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Identity.LicenseNumber, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Identity.LicenseNumber, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n LicenseNumber}"
|
Text="{u:I18n LicenseNumber}"
|
||||||
StyleClass="box-label" />
|
StyleClass="box-label"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Identity.LicenseNumber, Mode=OneWay}"
|
Text="{Binding Cipher.Identity.LicenseNumber, Mode=OneWay}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Identity.LicenseNumber, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Identity.LicenseNumber, Converter={StaticResource stringHasValue}}" />
|
||||||
<StackLayout StyleClass="box-row"
|
<StackLayout StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Identity.Email, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Identity.Email, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n Email}"
|
Text="{u:I18n Email}"
|
||||||
StyleClass="box-label" />
|
StyleClass="box-label"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Identity.Email, Mode=OneWay}"
|
Text="{Binding Cipher.Identity.Email, Mode=OneWay}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Identity.Email, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Identity.Email, Converter={StaticResource stringHasValue}}" />
|
||||||
<StackLayout StyleClass="box-row"
|
<StackLayout StyleClass="box-row"
|
||||||
IsVisible="{Binding Cipher.Identity.Phone, Converter={StaticResource stringHasValue}}">
|
IsVisible="{Binding Cipher.Identity.Phone, Converter={StaticResource stringHasValue}}"
|
||||||
|
AutomationId="ItemRow" >
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n Phone}"
|
Text="{u:I18n Phone}"
|
||||||
StyleClass="box-label" />
|
StyleClass="box-label"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Identity.Phone, Mode=OneWay}"
|
Text="{Binding Cipher.Identity.Phone, Mode=OneWay}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="ItemValue" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator"
|
<BoxView StyleClass="box-row-separator"
|
||||||
IsVisible="{Binding Cipher.Identity.Phone, Converter={StaticResource stringHasValue}}" />
|
IsVisible="{Binding Cipher.Identity.Phone, Converter={StaticResource stringHasValue}}" />
|
||||||
<StackLayout StyleClass="box-row" IsVisible="{Binding ShowIdentityAddress}">
|
<StackLayout StyleClass="box-row" IsVisible="{Binding ShowIdentityAddress}"
|
||||||
|
AutomationId="ItemRow">
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n Address}"
|
Text="{u:I18n Address}"
|
||||||
StyleClass="box-label" />
|
StyleClass="box-label"
|
||||||
|
AutomationId="ItemName" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Identity.Address1, Mode=OneWay}"
|
Text="{Binding Cipher.Identity.Address1, Mode=OneWay}"
|
||||||
IsVisible="{Binding Cipher.Identity.Address1, Converter={StaticResource stringHasValue}}"
|
IsVisible="{Binding Cipher.Identity.Address1, Converter={StaticResource stringHasValue}}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="IdentityAddressOneLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Identity.Address2, Mode=OneWay}"
|
Text="{Binding Cipher.Identity.Address2, Mode=OneWay}"
|
||||||
IsVisible="{Binding Cipher.Identity.Address2, Converter={StaticResource stringHasValue}}"
|
IsVisible="{Binding Cipher.Identity.Address2, Converter={StaticResource stringHasValue}}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="IdentityAddressTwoLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Identity.Address3, Mode=OneWay}"
|
Text="{Binding Cipher.Identity.Address3, Mode=OneWay}"
|
||||||
IsVisible="{Binding Cipher.Identity.Address3, Converter={StaticResource stringHasValue}}"
|
IsVisible="{Binding Cipher.Identity.Address3, Converter={StaticResource stringHasValue}}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="IdentityAddressThreeLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Identity.FullAddressPart2, Mode=OneWay}"
|
Text="{Binding Cipher.Identity.FullAddressPart2, Mode=OneWay}"
|
||||||
IsVisible="{Binding Cipher.Identity.FullAddressPart2, Converter={StaticResource stringHasValue}}"
|
IsVisible="{Binding Cipher.Identity.FullAddressPart2, Converter={StaticResource stringHasValue}}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="IdentityFullAddressPartTwoLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Cipher.Identity.Country, Mode=OneWay}"
|
Text="{Binding Cipher.Identity.Country, Mode=OneWay}"
|
||||||
IsVisible="{Binding Cipher.Identity.Country, Converter={StaticResource stringHasValue}}"
|
IsVisible="{Binding Cipher.Identity.Country, Converter={StaticResource stringHasValue}}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="IdentityCountryLabel" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" IsVisible="{Binding ShowIdentityAddress}" />
|
<BoxView StyleClass="box-row-separator" IsVisible="{Binding ShowIdentityAddress}" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
@@ -503,11 +575,11 @@
|
|||||||
<Label Text="{u:I18n URIs, Header=True}"
|
<Label Text="{u:I18n URIs, Header=True}"
|
||||||
StyleClass="box-header, box-header-platform" />
|
StyleClass="box-header, box-header-platform" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<controls:RepeaterView ItemsSource="{Binding Cipher.Login.Uris}">
|
<controls:RepeaterView ItemsSource="{Binding Cipher.Login.Uris}" AutomationId="CipherUriContainer">
|
||||||
<controls:RepeaterView.ItemTemplate>
|
<controls:RepeaterView.ItemTemplate>
|
||||||
<DataTemplate x:DataType="views:LoginUriView">
|
<DataTemplate x:DataType="views:LoginUriView">
|
||||||
<StackLayout Spacing="0" Padding="0">
|
<StackLayout Spacing="0" Padding="0">
|
||||||
<Grid StyleClass="box-row">
|
<Grid StyleClass="box-row" AutomationId="UriRow">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
@@ -533,7 +605,8 @@
|
|||||||
Text="{Binding HostOrUri, Mode=OneWay}"
|
Text="{Binding HostOrUri, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0" />
|
Grid.Column="0"
|
||||||
|
AutomationId="UriValue" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.ShareSquare}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.ShareSquare}}"
|
||||||
@@ -544,7 +617,8 @@
|
|||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
IsVisible="{Binding CanLaunch, Mode=OneWay}"
|
IsVisible="{Binding CanLaunch, Mode=OneWay}"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Launch}" />
|
AutomationProperties.Name="{u:I18n Launch}"
|
||||||
|
AutomationId="LaunchUriButton" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
||||||
@@ -554,7 +628,8 @@
|
|||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Copy}" />
|
AutomationProperties.Name="{u:I18n Copy}"
|
||||||
|
AutomationId="CopyUriButton" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
@@ -568,14 +643,15 @@
|
|||||||
<Label Text="{u:I18n Notes, Header=True}"
|
<Label Text="{u:I18n Notes, Header=True}"
|
||||||
StyleClass="box-header, box-header-platform" />
|
StyleClass="box-header, box-header-platform" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row">
|
<StackLayout StyleClass="box-row" AutomationId="NotesRow">
|
||||||
<controls:SelectableLabel
|
<controls:SelectableLabel
|
||||||
Text="{Binding Cipher.Notes, Mode=OneWay}"
|
Text="{Binding Cipher.Notes, Mode=OneWay}"
|
||||||
StyleClass="box-value" />
|
StyleClass="box-value"
|
||||||
|
AutomationId="CipherNotesLabel" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box" IsVisible="{Binding Cipher.HasFields}">
|
<StackLayout StyleClass="box" IsVisible="{Binding Cipher.HasFields}" AutomationId="CustomFieldsContainer">
|
||||||
<StackLayout StyleClass="box-row-header">
|
<StackLayout StyleClass="box-row-header">
|
||||||
<Label Text="{u:I18n CustomFields, Header=True}"
|
<Label Text="{u:I18n CustomFields, Header=True}"
|
||||||
StyleClass="box-header, box-header-platform" />
|
StyleClass="box-header, box-header-platform" />
|
||||||
@@ -590,21 +666,23 @@
|
|||||||
<Label Text="{u:I18n Attachments, Header=True}"
|
<Label Text="{u:I18n Attachments, Header=True}"
|
||||||
StyleClass="box-header, box-header-platform" />
|
StyleClass="box-header, box-header-platform" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<controls:RepeaterView ItemsSource="{Binding Cipher.Attachments}">
|
<controls:RepeaterView ItemsSource="{Binding Cipher.Attachments}" AutomationId="CipherAttachmentsContainer">
|
||||||
<controls:RepeaterView.ItemTemplate>
|
<controls:RepeaterView.ItemTemplate>
|
||||||
<DataTemplate x:DataType="views:AttachmentView">
|
<DataTemplate x:DataType="views:AttachmentView">
|
||||||
<StackLayout Spacing="0" Padding="0">
|
<StackLayout Spacing="0" Padding="0">
|
||||||
<StackLayout Orientation="Horizontal" StyleClass="box-row" Spacing="10">
|
<StackLayout Orientation="Horizontal" StyleClass="box-row" Spacing="10" AutomationId="CipherAttachment">
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding FileName, Mode=OneWay}"
|
Text="{Binding FileName, Mode=OneWay}"
|
||||||
StyleClass="box-value"
|
StyleClass="box-value"
|
||||||
VerticalTextAlignment="Center"
|
VerticalTextAlignment="Center"
|
||||||
HorizontalOptions="StartAndExpand" />
|
HorizontalOptions="StartAndExpand"
|
||||||
|
AutomationId="CipherAttachmentFileNameLabel" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding SizeName, Mode=OneWay}"
|
Text="{Binding SizeName, Mode=OneWay}"
|
||||||
StyleClass="box-sub-label"
|
StyleClass="box-sub-label"
|
||||||
HorizontalTextAlignment="End"
|
HorizontalTextAlignment="End"
|
||||||
VerticalTextAlignment="Center" />
|
VerticalTextAlignment="Center"
|
||||||
|
AutomationId="CipherAttachmentFileSizeLabel" />
|
||||||
<controls:IconButton
|
<controls:IconButton
|
||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Download}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Download}}"
|
||||||
@@ -612,7 +690,8 @@
|
|||||||
CommandParameter="{Binding .}"
|
CommandParameter="{Binding .}"
|
||||||
VerticalOptions="Center"
|
VerticalOptions="Center"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Download}" />
|
AutomationProperties.Name="{u:I18n Download}"
|
||||||
|
AutomationId="CipherAttachmentDownloadButton" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="box-row-separator" />
|
<BoxView StyleClass="box-row-separator" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
@@ -622,17 +701,20 @@
|
|||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-bottom">
|
<StackLayout StyleClass="box-bottom">
|
||||||
<Label FormattedText="{Binding UpdatedText}"
|
<Label FormattedText="{Binding UpdatedText}"
|
||||||
StyleClass="box-footer-label" />
|
StyleClass="box-footer-label"
|
||||||
|
AutomationId="CipherUpdatedDateLabel" />
|
||||||
<Label FormattedText="{Binding PasswordUpdatedText}"
|
<Label FormattedText="{Binding PasswordUpdatedText}"
|
||||||
StyleClass="box-footer-label"
|
StyleClass="box-footer-label"
|
||||||
IsVisible="{Binding Cipher.PasswordRevisionDisplayDate, Converter={StaticResource notNull}}">
|
IsVisible="{Binding Cipher.PasswordRevisionDisplayDate, Converter={StaticResource notNull}}"
|
||||||
|
AutomationId="CipherUpdatedPasswordDateLabel">
|
||||||
<Label.GestureRecognizers>
|
<Label.GestureRecognizers>
|
||||||
<TapGestureRecognizer Tapped="PasswordHistory_Tapped" />
|
<TapGestureRecognizer Tapped="PasswordHistory_Tapped" />
|
||||||
</Label.GestureRecognizers>
|
</Label.GestureRecognizers>
|
||||||
</Label>
|
</Label>
|
||||||
<Label FormattedText="{Binding PasswordHistoryText}"
|
<Label FormattedText="{Binding PasswordHistoryText}"
|
||||||
StyleClass="box-footer-label"
|
StyleClass="box-footer-label"
|
||||||
IsVisible="{Binding Cipher.HasPasswordHistory}">
|
IsVisible="{Binding Cipher.HasPasswordHistory}"
|
||||||
|
AutomationId="CipherPasswordHistoryLabel">
|
||||||
<Label.GestureRecognizers>
|
<Label.GestureRecognizers>
|
||||||
<TapGestureRecognizer Tapped="PasswordHistory_Tapped" />
|
<TapGestureRecognizer Tapped="PasswordHistory_Tapped" />
|
||||||
</Label.GestureRecognizers>
|
</Label.GestureRecognizers>
|
||||||
@@ -662,6 +744,7 @@
|
|||||||
AbsoluteLayout.LayoutBounds="1, 1, AutoSize, AutoSize"
|
AbsoluteLayout.LayoutBounds="1, 1, AutoSize, AutoSize"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n EditItem}"
|
AutomationProperties.Name="{u:I18n EditItem}"
|
||||||
|
AutomationId="CipherEditButton"
|
||||||
IsVisible="{Binding CanEdit}">
|
IsVisible="{Binding CanEdit}">
|
||||||
<Button.Effects>
|
<Button.Effects>
|
||||||
<effects:FabShadowEffect />
|
<effects:FabShadowEffect />
|
||||||
|
|||||||
@@ -19,7 +19,8 @@
|
|||||||
Priority="-1"
|
Priority="-1"
|
||||||
UseOriginalImage="True"
|
UseOriginalImage="True"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Account}" />
|
AutomationProperties.Name="{u:I18n Account}"
|
||||||
|
AutomationId="AccountIconButton" />
|
||||||
<ToolbarItem IconImageSource="search.png" Clicked="Search_Clicked"
|
<ToolbarItem IconImageSource="search.png" Clicked="Search_Clicked"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Search}" />
|
AutomationProperties.Name="{u:I18n Search}" />
|
||||||
|
|||||||
@@ -41,7 +41,8 @@
|
|||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
TextChanged="SearchBar_TextChanged"
|
TextChanged="SearchBar_TextChanged"
|
||||||
SearchButtonPressed="SearchBar_SearchButtonPressed"
|
SearchButtonPressed="SearchBar_SearchButtonPressed"
|
||||||
Placeholder="{Binding PageTitle}" />
|
Placeholder="{Binding PageTitle}"
|
||||||
|
AutomationId="SearchBar" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="list-section-separator-bottom, list-section-separator-bottom-platform"
|
<BoxView StyleClass="list-section-separator-bottom, list-section-separator-bottom-platform"
|
||||||
x:Name="_separator" x:Key="separator" />
|
x:Name="_separator" x:Key="separator" />
|
||||||
@@ -91,7 +92,8 @@
|
|||||||
Source="empty_items_state" />
|
Source="empty_items_state" />
|
||||||
<Label
|
<Label
|
||||||
Text="{u:I18n ThereAreNoItemsThatMatchTheSearch}"
|
Text="{u:I18n ThereAreNoItemsThatMatchTheSearch}"
|
||||||
HorizontalTextAlignment="Center" />
|
HorizontalTextAlignment="Center"
|
||||||
|
AutomationId="NoSearchResultsLabel" />
|
||||||
<Button
|
<Button
|
||||||
Text="{u:I18n AddAnItem}"
|
Text="{u:I18n AddAnItem}"
|
||||||
Command="{Binding AddCipherCommand}"
|
Command="{Binding AddCipherCommand}"
|
||||||
@@ -104,7 +106,8 @@
|
|||||||
SelectionMode="Single"
|
SelectionMode="Single"
|
||||||
SelectionChanged="RowSelected"
|
SelectionChanged="RowSelected"
|
||||||
StyleClass="list, list-platform"
|
StyleClass="list, list-platform"
|
||||||
ExtraDataForLogging="Ciphers Page">
|
ExtraDataForLogging="Ciphers Page"
|
||||||
|
AutomationId="CipherList">
|
||||||
<CollectionView.ItemTemplate>
|
<CollectionView.ItemTemplate>
|
||||||
<DataTemplate x:DataType="views:CipherView">
|
<DataTemplate x:DataType="views:CipherView">
|
||||||
<controls:CipherViewCell
|
<controls:CipherViewCell
|
||||||
|
|||||||
@@ -25,7 +25,8 @@
|
|||||||
Priority="-1"
|
Priority="-1"
|
||||||
UseOriginalImage="True"
|
UseOriginalImage="True"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Account}" />
|
AutomationProperties.Name="{u:I18n Account}"
|
||||||
|
AutomationId="AccountIconButton" />
|
||||||
<ToolbarItem Icon="search.png" Clicked="Search_Clicked"
|
<ToolbarItem Icon="search.png" Clicked="Search_Clicked"
|
||||||
AutomationProperties.IsInAccessibleTree="True"
|
AutomationProperties.IsInAccessibleTree="True"
|
||||||
AutomationProperties.Name="{u:I18n Search}" />
|
AutomationProperties.Name="{u:I18n Search}" />
|
||||||
@@ -59,13 +60,14 @@
|
|||||||
<controls:AuthenticatorViewCell
|
<controls:AuthenticatorViewCell
|
||||||
Cipher="{Binding Cipher}"
|
Cipher="{Binding Cipher}"
|
||||||
WebsiteIconsEnabled="{Binding BindingContext.WebsiteIconsEnabled, Source={x:Reference _page}}"
|
WebsiteIconsEnabled="{Binding BindingContext.WebsiteIconsEnabled, Source={x:Reference _page}}"
|
||||||
TotpSec="{Binding TotpSec}"/>
|
TotpSec="{Binding TotpSec}" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
<DataTemplate x:Key="groupTemplate"
|
<DataTemplate x:Key="groupTemplate"
|
||||||
x:DataType="pages:GroupingsPageListItem">
|
x:DataType="pages:GroupingsPageListItem">
|
||||||
<controls:ExtendedStackLayout Orientation="Horizontal"
|
<controls:ExtendedStackLayout Orientation="Horizontal"
|
||||||
StyleClass="list-row, list-row-platform">
|
StyleClass="list-row, list-row-platform"
|
||||||
|
AutomationId="{Binding AutomationId}">
|
||||||
<controls:IconLabel Text="{Binding Icon, Mode=OneWay}"
|
<controls:IconLabel Text="{Binding Icon, Mode=OneWay}"
|
||||||
HorizontalOptions="Start"
|
HorizontalOptions="Start"
|
||||||
VerticalOptions="Center"
|
VerticalOptions="Center"
|
||||||
@@ -79,12 +81,14 @@
|
|||||||
LineBreakMode="TailTruncation"
|
LineBreakMode="TailTruncation"
|
||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
StyleClass="list-title"/>
|
StyleClass="list-title"
|
||||||
|
AutomationId="ItemNameLabel" />
|
||||||
<Label Text="{Binding ItemCount, Mode=OneWay}"
|
<Label Text="{Binding ItemCount, Mode=OneWay}"
|
||||||
HorizontalOptions="End"
|
HorizontalOptions="End"
|
||||||
VerticalOptions="CenterAndExpand"
|
VerticalOptions="CenterAndExpand"
|
||||||
HorizontalTextAlignment="End"
|
HorizontalTextAlignment="End"
|
||||||
StyleClass="list-sub"/>
|
StyleClass="list-sub"
|
||||||
|
AutomationId="ItemCountLabel" />
|
||||||
</controls:ExtendedStackLayout>
|
</controls:ExtendedStackLayout>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
@@ -95,7 +99,8 @@
|
|||||||
Spacing="0"
|
Spacing="0"
|
||||||
Padding="0"
|
Padding="0"
|
||||||
VerticalOptions="FillAndExpand"
|
VerticalOptions="FillAndExpand"
|
||||||
StyleClass="list-row-header-container, list-row-header-container-platform">
|
StyleClass="list-row-header-container, list-row-header-container-platform"
|
||||||
|
AutomationId="{Binding AutomationId}">
|
||||||
<BoxView
|
<BoxView
|
||||||
StyleClass="list-section-separator-top, list-section-separator-top-platform" />
|
StyleClass="list-section-separator-top, list-section-separator-top-platform" />
|
||||||
<StackLayout StyleClass="list-row-header, list-row-header-platform">
|
<StackLayout StyleClass="list-row-header, list-row-header-platform">
|
||||||
@@ -104,7 +109,8 @@
|
|||||||
StyleClass="list-header, list-header-platform" />
|
StyleClass="list-header, list-header-platform" />
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding ItemCount}"
|
Text="{Binding ItemCount}"
|
||||||
StyleClass="list-header-sub" />
|
StyleClass="list-header-sub"
|
||||||
|
AutomationId="SectionItemCount" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<BoxView StyleClass="list-section-separator-bottom, list-section-separator-bottom-platform" />
|
<BoxView StyleClass="list-section-separator-bottom, list-section-separator-bottom-platform" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
@@ -147,7 +153,8 @@
|
|||||||
IsVisible="{Binding ShowNoData}">
|
IsVisible="{Binding ShowNoData}">
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding NoDataText}"
|
Text="{Binding NoDataText}"
|
||||||
HorizontalTextAlignment="Center"></Label>
|
HorizontalTextAlignment="Center"
|
||||||
|
AutomationId="NoDataDisplayed"></Label>
|
||||||
<Button
|
<Button
|
||||||
Text="{u:I18n AddAnItem}"
|
Text="{u:I18n AddAnItem}"
|
||||||
Clicked="AddButton_Clicked"
|
Clicked="AddButton_Clicked"
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
namespace Bit.App.Pages
|
using Bit.App.Utilities.Automation;
|
||||||
|
|
||||||
|
namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
public class GroupingsPageHeaderListItem : IGroupingsPageListItem
|
public class GroupingsPageHeaderListItem : IGroupingsPageListItem
|
||||||
{
|
{
|
||||||
@@ -10,5 +12,12 @@
|
|||||||
|
|
||||||
public string Title { get; }
|
public string Title { get; }
|
||||||
public string ItemCount { get; set; }
|
public string ItemCount { get; set; }
|
||||||
|
public string AutomationId
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return AutomationIdsHelper.AddSuffixFor(AutomationIdsHelper.ToEnglishTitleCase(Title), SuffixType.Header);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Bit.App.Utilities.Automation;
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
@@ -32,5 +33,6 @@ namespace Bit.App.Pages
|
|||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string NameShort => string.IsNullOrWhiteSpace(Name) || Name.Length == 0 ? "-" : Name[0].ToString();
|
public string NameShort => string.IsNullOrWhiteSpace(Name) || Name.Length == 0 ? "-" : Name[0].ToString();
|
||||||
public string ItemCount { get; set; }
|
public string ItemCount { get; set; }
|
||||||
|
public string AutomationId => AutomationIdsHelper.AddSuffixFor(NameShort, SuffixType.ListGroup);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Bit.App.Resources;
|
using Bit.App.Resources;
|
||||||
|
using Bit.App.Utilities.Automation;
|
||||||
using Bit.Core;
|
using Bit.Core;
|
||||||
using Bit.Core.Enums;
|
using Bit.Core.Enums;
|
||||||
using Bit.Core.Models.View;
|
using Bit.Core.Models.View;
|
||||||
@@ -115,5 +116,38 @@ namespace Bit.App.Pages
|
|||||||
return _icon;
|
return _icon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string AutomationId
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (Type != null)
|
||||||
|
{
|
||||||
|
return AutomationIdsHelper.AddSuffixFor(System.Enum.GetName(typeof(CipherType), Type.Value), SuffixType.Filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsTrash)
|
||||||
|
{
|
||||||
|
return AutomationIdsHelper.AddSuffixFor("Trash", SuffixType.Filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Folder != null)
|
||||||
|
{
|
||||||
|
return AutomationIdsHelper.AddSuffixFor("Folder", SuffixType.Filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Collection != null)
|
||||||
|
{
|
||||||
|
return AutomationIdsHelper.AddSuffixFor("Collection", SuffixType.Filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsTotpCode)
|
||||||
|
{
|
||||||
|
return AutomationIdsHelper.AddSuffixFor("TOTP", SuffixType.ListItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
144
src/App/Resources/AppResources.Designer.cs
generated
144
src/App/Resources/AppResources.Designer.cs
generated
@@ -418,6 +418,15 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Admin approval requested.
|
||||||
|
/// </summary>
|
||||||
|
public static string AdminApprovalRequested {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("AdminApprovalRequested", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to All.
|
/// Looks up a localized string similar to All.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -562,6 +571,24 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Approve with master password.
|
||||||
|
/// </summary>
|
||||||
|
public static string ApproveWithMasterPassword {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ApproveWithMasterPassword", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Approve with my other device.
|
||||||
|
/// </summary>
|
||||||
|
public static string ApproveWithMyOtherDevice {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ApproveWithMyOtherDevice", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to April.
|
/// Looks up a localized string similar to April.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -3262,6 +3289,24 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Invalid API key.
|
||||||
|
/// </summary>
|
||||||
|
public static string InvalidAPIKey {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("InvalidAPIKey", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Invalid API token.
|
||||||
|
/// </summary>
|
||||||
|
public static string InvalidAPIToken {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("InvalidAPIToken", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Invalid email address..
|
/// Looks up a localized string similar to Invalid email address..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -3568,6 +3613,15 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Logged in!.
|
||||||
|
/// </summary>
|
||||||
|
public static string LoggedIn {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("LoggedIn", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Logged in as {0} on {1}..
|
/// Looks up a localized string similar to Logged in as {0} on {1}..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -3586,6 +3640,15 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Logging in as {0}.
|
||||||
|
/// </summary>
|
||||||
|
public static string LoggingInAsX {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("LoggingInAsX", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Logging in as {0} on {1}.
|
/// Looks up a localized string similar to Logging in as {0} on {1}.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -3894,6 +3957,15 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Master password re-prompt help.
|
||||||
|
/// </summary>
|
||||||
|
public static string MasterPasswordRePromptHelp {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("MasterPasswordRePromptHelp", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Match detection.
|
/// Looks up a localized string similar to Match detection.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -5165,6 +5237,15 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Remember this device.
|
||||||
|
/// </summary>
|
||||||
|
public static string RememberThisDevice {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("RememberThisDevice", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Remove.
|
/// Looks up a localized string similar to Remove.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -5237,6 +5318,15 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Request admin approval.
|
||||||
|
/// </summary>
|
||||||
|
public static string RequestAdminApproval {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("RequestAdminApproval", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Request one-time password.
|
/// Looks up a localized string similar to Request one-time password.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -6227,6 +6317,15 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Trouble logging in?.
|
||||||
|
/// </summary>
|
||||||
|
public static string TroubleLoggingIn {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("TroubleLoggingIn", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Try again.
|
/// Looks up a localized string similar to Try again.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -6236,6 +6335,15 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Turn off using a public device.
|
||||||
|
/// </summary>
|
||||||
|
public static string TurnOffUsingPublicDevice {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("TurnOffUsingPublicDevice", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to 20 seconds.
|
/// Looks up a localized string similar to 20 seconds.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -6425,6 +6533,15 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve..
|
||||||
|
/// </summary>
|
||||||
|
public static string UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Unlock vault.
|
/// Looks up a localized string similar to Unlock vault.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -6515,15 +6632,6 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks up a localized string similar to Upload has been canceled.
|
|
||||||
/// </summary>
|
|
||||||
public static string UploadHasBeenCanceled {
|
|
||||||
get {
|
|
||||||
return ResourceManager.GetString("UploadHasBeenCanceled", resourceCulture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Uppercase (A to Z).
|
/// Looks up a localized string similar to Uppercase (A to Z).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -7118,6 +7226,24 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Your request has been sent to your admin..
|
||||||
|
/// </summary>
|
||||||
|
public static string YourRequestHasBeenSentToYourAdmin {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("YourRequestHasBeenSentToYourAdmin", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to You will be notified once approved. .
|
||||||
|
/// </summary>
|
||||||
|
public static string YouWillBeNotifiedOnceApproved {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("YouWillBeNotifiedOnceApproved", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to To continue, hold your YubiKey NEO against the back of the device or insert your YubiKey into your device's USB port, then touch its button..
|
/// Looks up a localized string similar to To continue, hold your YubiKey NEO against the back of the device or insert your YubiKey into your device's USB port, then touch its button..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1753,10 +1753,10 @@ Skandering gebeur outomaties.</value>
|
|||||||
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
|
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountBiometricInvalidated" xml:space="preserve">
|
<data name="AccountBiometricInvalidated" xml:space="preserve">
|
||||||
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
|
<value>Biometriese ontgrendeling vir hierdie rekening is gedeaktiveer hangende bevestiging van hoofwagwoord.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
|
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
|
||||||
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
|
<value>Outovul-biometriese ontgrendeline vir hierdie rekening is gedeaktiveer hangende bevestiging van hoofwagwoord.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnableSyncOnRefresh" xml:space="preserve">
|
<data name="EnableSyncOnRefresh" xml:space="preserve">
|
||||||
<value>Aktiveer sinchronisering by verfrissing</value>
|
<value>Aktiveer sinchronisering by verfrissing</value>
|
||||||
@@ -2495,8 +2495,8 @@ Wil u na die rekening omskakel?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Kry hoofwagwoord wenk</value>
|
<value>Kry hoofwagwoord wenk</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Teken in as {0}</value>
|
<value>Teken aan as {0} op {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Nie jy nie?</value>
|
<value>Nie jy nie?</value>
|
||||||
@@ -2609,10 +2609,37 @@ Wil u na die rekening omskakel?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Daar is geen items wat met die soekterm ooreenstem nie</value>
|
<value>Daar is geen items wat met die soekterm ooreenstem nie</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>VS</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Selghehuisves</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Datastreek</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Streek</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<value>U hoofwagwoord voldoen nie aan een of meer van die organisasiebeleide nie. Om toegang tot die kluis te kry, moet u nou u hoofwagwoord bywerk. Deur voort te gaan sal u van u huidige sessie afgeteken word, en u sal weer moet aanteken. Aktiewe sessies op ander toestelle kan vir tot een uur aktief bly.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Huidige hoofwagwoord</value>
|
||||||
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -1753,10 +1753,10 @@
|
|||||||
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
|
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountBiometricInvalidated" xml:space="preserve">
|
<data name="AccountBiometricInvalidated" xml:space="preserve">
|
||||||
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
|
<value>تم تعطيل فتح القفل الحيوي لهذا الحساب في انتظار التحقق من كلمة المرور الرئيسية.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
|
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
|
||||||
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
|
<value>إلغاء القفل الحيوي للملء التلقائي لهذا الحساب معطل في انتظار التحقق من كلمة المرور الرئيسية.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnableSyncOnRefresh" xml:space="preserve">
|
<data name="EnableSyncOnRefresh" xml:space="preserve">
|
||||||
<value>تمكين المزامنة عند التحديث</value>
|
<value>تمكين المزامنة عند التحديث</value>
|
||||||
@@ -2496,8 +2496,8 @@
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>احصل على تلميح كلمة المرور الرئيسية</value>
|
<value>احصل على تلميح كلمة المرور الرئيسية</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>تسجيل الدخول كـ {0}</value>
|
<value>تسجيل الدخول كـ {0} في {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>ليس أنت؟</value>
|
<value>ليس أنت؟</value>
|
||||||
@@ -2610,10 +2610,37 @@
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>لا توجد عناصر تطابق البحث</value>
|
<value>لا توجد عناصر تطابق البحث</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>الولايات المتحدة</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>الاتحاد الأوروبي</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>استضافة ذاتية</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>منطقة البيانات</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>المنطقة</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>كلمة المرور الرئيسية الخاصة بك لا تفي بواحدة أو أكثر من سياسات مؤسستك. من أجل الوصول إلى الخزنة، يجب عليك تحديث كلمة المرور الرئيسية الآن. سيتم تسجيل خروجك من الجلسة الحالية، مما يتطلب منك تسجيل الدخول مرة أخرى. وقد تظل الجلسات النشطة على أجهزة أخرى نشطة لمدة تصل إلى ساعة واحدة.</value>
|
<value>كلمة المرور الرئيسية الخاصة بك لا تفي بواحدة أو أكثر من سياسات مؤسستك. من أجل الوصول إلى الخزنة، يجب عليك تحديث كلمة المرور الرئيسية الآن. سيتم تسجيل خروجك من الجلسة الحالية، مما يتطلب منك تسجيل الدخول مرة أخرى. وقد تظل الجلسات النشطة على أجهزة أخرى نشطة لمدة تصل إلى ساعة واحدة.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>كلمة المرور الرئيسية الحالية</value>
|
<value>كلمة المرور الرئيسية الحالية</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2494,8 +2494,8 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Ana parol üçün məsləhət alın</value>
|
<value>Ana parol üçün məsləhət alın</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>{0} olaraq giriş edilir</value>
|
<value>{1} üzərində {0} olaraq giriş edildi</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Siz deyilsiniz?</value>
|
<value>Siz deyilsiniz?</value>
|
||||||
@@ -2608,10 +2608,37 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Axtarışa uyğun gələn heç bir element yoxdur</value>
|
<value>Axtarışa uyğun gələn heç bir element yoxdur</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>ABŞ</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>AB</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Öz-özünə sahiblik edən</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data bölgəsi</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Bölgə</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Ana parolunuz təşkilatınızdakı siyasətlərdən birinə və ya bir neçəsinə uyğun gəlmir. 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>
|
<value>Ana parolunuz təşkilatınızdakı siyasətlərdən birinə və ya bir neçəsinə uyğun gəlmir. Anbara müraciət üçün ana parolunuzu indi güncəlləməlisiniz. Davam etsəniz, hazırkı seansdan çıxış etmiş və təkrar giriş etməli olacaqsınız. Digər cihazlardakı aktiv seanslar bir saata qədər aktiv qalmağa davam edə bilər.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Hazırkı ana parol</value>
|
<value>Hazırkı ana parol</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Ana parolu təkrar soruş köməyi</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Yetərsiz yaddaşa görə kilid açma uğursuz ola bilər. Həll etmək üçün KDF yaddaş tənzimləmələrinizi azaldın</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Yararsız API açarı</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Yararsız API tokeni</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2495,8 +2495,8 @@
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Атрымаць падказку да асноўнага пароля</value>
|
<value>Атрымаць падказку да асноўнага пароля</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Увайсці як {0}</value>
|
<value>Вы ўваходзіце як {0} у {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Не вы?</value>
|
<value>Не вы?</value>
|
||||||
@@ -2609,10 +2609,37 @@
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Адсутнічаюць элементы, якія адпавядаюць пошуку</value>
|
<value>Адсутнічаюць элементы, якія адпавядаюць пошуку</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>ЗША</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>ЕС</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Уласнае размяшчэнне</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Рэгіён даных</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Рэгіён</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Ваш асноўны пароль не адпавядае адной або некалькім палітыкам арганізацыі. Для атрымання доступу да сховішча, вы павінны абнавіць яго. Працягваючы, вы выйдзіце з бягучага сеанса і вам неабходна будзе ўвайсці паўторна. Актыўныя сеансы на іншых прыладах могуць заставацца актыўнымі на працягу адной гадзіны.</value>
|
<value>Ваш асноўны пароль не адпавядае адной або некалькім палітыкам арганізацыі. Для атрымання доступу да сховішча, вы павінны абнавіць яго. Працягваючы, вы выйдзіце з бягучага сеанса і вам неабходна будзе ўвайсці паўторна. Актыўныя сеансы на іншых прыладах могуць заставацца актыўнымі на працягу адной гадзіны.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Бягучы асноўны пароль</value>
|
<value>Бягучы асноўны пароль</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Дапамога з паўторным запытам асноўнага пароля</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Па прычыне недахопу памяці можа адбыцца збой разблакіроўкі. Паменшыце налады памяці KDF, каб вырашыць гэту праблему</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Памылковы ключ API</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Памылковы токен API</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2495,8 +2495,8 @@ select Add TOTP to store the key safely</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Получете подсказване за главната парола</value>
|
<value>Получете подсказване за главната парола</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Вписване като {0}</value>
|
<value>Влизате като {0} в {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Това не сте Вие?</value>
|
<value>Това не сте Вие?</value>
|
||||||
@@ -2609,10 +2609,37 @@ select Add TOTP to store the key safely</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Няма елементи, които отговарят на търсенето</value>
|
<value>Няма елементи, които отговарят на търсенето</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>САЩ</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>ЕС</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Собствен хостинг</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Регион на данните</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Регион</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Вашата главна парола не отговаря на една или повече политики на организацията Ви. За да получите достъп до трезора, трябва да промените главната си парола сега. Това означава, че ще бъдете отписан(а) от текущата си сесия и ще трябва да се впишете отново. Активните сесии на други устройства може да продължат да бъдат активни още един час.</value>
|
<value>Вашата главна парола не отговаря на една или повече политики на организацията Ви. За да получите достъп до трезора, трябва да промените главната си парола сега. Това означава, че ще бъдете отписан(а) от текущата си сесия и ще трябва да се впишете отново. Активните сесии на други устройства може да продължат да бъдат активни още един час.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Текуща главна парола</value>
|
<value>Текуща главна парола</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Помощ за повторното запитване за главната парола</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Отключването може да бъде неуспешно заради недостатъчно памет. Намалете настройките на паметта за KDF, за да разрешите проблема.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Неправилен ключ за ППИ</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Неправилен идентификатор за ППИ</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2496,8 +2496,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Get master password hint</value>
|
<value>Get master password hint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Not you?</value>
|
<value>Not you?</value>
|
||||||
@@ -2610,10 +2610,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>There are no items that match the search</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2494,8 +2494,8 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Dobijte podsjetnik glavne lozinke</value>
|
<value>Dobijte podsjetnik glavne lozinke</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Prijava kao {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Nisi ti?</value>
|
<value>Nisi ti?</value>
|
||||||
@@ -2608,10 +2608,37 @@ Skeniranje će biti izvršeno automatski.</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>There are no items that match the search</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2495,8 +2495,8 @@ Voleu canviar a aquest compte?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Obteniu la pista de la contrasenya mestra</value>
|
<value>Obteniu la pista de la contrasenya mestra</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Connectat com {0}</value>
|
<value>Inici de sessió com a {0} a {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>No sou vosaltres?</value>
|
<value>No sou vosaltres?</value>
|
||||||
@@ -2609,10 +2609,37 @@ Voleu canviar a aquest compte?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>No hi ha elements que coincidisquen amb la cerca</value>
|
<value>No hi ha elements que coincidisquen amb la cerca</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>EUA</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>UE</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Autoallotjat</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Regió de dades</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Regió</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>La vostra contrasenya mestra no compleix una o més de les polítiques de l'organització. Per accedir a la caixa forta, heu d'actualitzar-la ara. Si continueu, es tancarà la sessió actual i us demanarà que torneu a iniciar-la. Les sessions en altres dispositius poden continuar romanent actives fins a una hora.</value>
|
<value>La vostra contrasenya mestra no compleix una o més de les polítiques de l'organització. Per accedir a la caixa forta, heu d'actualitzar-la ara. Si continueu, es tancarà la sessió actual i us demanarà que torneu a iniciar-la. Les sessions en altres dispositius poden continuar romanent actives fins a una hora.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Contrasenya mestra actual</value>
|
<value>Contrasenya mestra actual</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Ajuda per tornar a demanar la contrasenya mestra</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>El desbloqueig pot fallar a causa de memòria insuficient. Disminueix la configuració de memòria KDF per resoldre-ho</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Clau API no vàlida</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Token API no vàlid</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2494,8 +2494,8 @@ Chcete se přepnout na tento účet?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Získat nápovědu pro hlavní heslo</value>
|
<value>Získat nápovědu pro hlavní heslo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Přihlášování jako {0}</value>
|
<value>Přihlašování jako {0} na {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Nejste to Vy?</value>
|
<value>Nejste to Vy?</value>
|
||||||
@@ -2608,10 +2608,37 @@ Chcete se přepnout na tento účet?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Neexistují žádné položky, které by odpovídaly hledání</value>
|
<value>Neexistují žádné položky, které by odpovídaly hledání</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Vlastní hosting</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Datový region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Vaše hlavní heslo nesplňuje jednu nebo více zásad Vaší organizace. Pro přístup k trezoru musíte nyní aktualizovat své hlavní heslo. Pokračování Vás odhlásí z Vaší aktuální relace a bude nutné se přihlásit. Aktivní relace na jiných zařízeních mohou zůstat aktivní až po dobu jedné hodiny.</value>
|
<value>Vaše hlavní heslo nesplňuje jednu nebo více zásad Vaší organizace. Pro přístup k trezoru musíte nyní aktualizovat své hlavní heslo. Pokračování Vás odhlásí z Vaší aktuální relace a bude nutné se přihlásit. Aktivní relace na jiných zařízeních mohou zůstat aktivní až po dobu jedné hodiny.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Aktuální hlavní heslo</value>
|
<value>Aktuální hlavní heslo</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Nápověda pro znovuzeptání se na hlavní heslo</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Odemknutí může selhat z důvodu nedostatku paměti. Pro vyřešení snižte nastavení paměti KDF.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Neplatný klíč API</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Neplatný token API</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2496,8 +2496,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Get master password hint</value>
|
<value>Get master password hint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Not you?</value>
|
<value>Not you?</value>
|
||||||
@@ -2610,10 +2610,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>There are no items that match the search</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2495,8 +2495,8 @@ Vil du skifte til denne konto?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Få hovedadgangskodetip</value>
|
<value>Få hovedadgangskodetip</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logger ind som {0}</value>
|
<value>Logger ind som {0} på {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Ikke dig?</value>
|
<value>Ikke dig?</value>
|
||||||
@@ -2609,10 +2609,37 @@ Vil du skifte til denne konto?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Ingen emner matcher søgningen</value>
|
<value>Ingen emner matcher søgningen</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>USA</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Selv-hostet</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Dataregion</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Din hovedadgangskode overholder ikke én eller flere organisationspolitikker. For at få adgang til boksen skal hovedadgangskode opdateres nu. Fortsættes, logges du ud af den nuværende session og vil skulle logger ind igen. Aktive sessioner på andre enheder kan forblive aktive i op til én time.</value>
|
<value>Din hovedadgangskode overholder ikke én eller flere organisationspolitikker. For at få adgang til boksen skal hovedadgangskode opdateres nu. Fortsættes, logges du ud af den nuværende session og vil skulle logger ind igen. Aktive sessioner på andre enheder kan forblive aktive i op til én time.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Aktuel hovedadgangskode</value>
|
<value>Aktuel hovedadgangskode</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Hjælp til genanmodning om hovedadgangskode</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Oplåsning kan fejle grundet utilstrækkelig hukommelse. Reducér KDF-hukommelsesindstillinger for at afhjælpe</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Ugyldig API-nøgle</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Ugyldigt API-token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2494,8 +2494,8 @@ Möchtest du zu diesem Konto wechseln?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Hinweis zum Master-Passwort erhalten</value>
|
<value>Hinweis zum Master-Passwort erhalten</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Anmelden als {0}</value>
|
<value>Anmelden als {0} auf {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Nicht du?</value>
|
<value>Nicht du?</value>
|
||||||
@@ -2608,10 +2608,37 @@ Möchtest du zu diesem Konto wechseln?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Es gibt keine Einträge, die mit der Suche übereinstimmen</value>
|
<value>Es gibt keine Einträge, die mit der Suche übereinstimmen</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Selbst gehostet</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Datenregion</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Dein Master-Passwort entspricht nicht einer oder mehreren Richtlinien deiner Organisation. Um auf den Tresor zugreifen zu können, musst du dein Master-Passwort jetzt aktualisieren. Wenn du fortfährst, wirst du von deiner aktuellen Sitzung abgemeldet und musst dich erneut anmelden. Aktive Sitzungen auf anderen Geräten können noch bis zu einer Stunde lang aktiv bleiben.</value>
|
<value>Dein Master-Passwort entspricht nicht einer oder mehreren Richtlinien deiner Organisation. Um auf den Tresor zugreifen zu können, musst du dein Master-Passwort jetzt aktualisieren. Wenn du fortfährst, wirst du von deiner aktuellen Sitzung abgemeldet und musst dich erneut anmelden. Aktive Sitzungen auf anderen Geräten können noch bis zu einer Stunde lang aktiv bleiben.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Aktuelles Master-Passwort</value>
|
<value>Aktuelles Master-Passwort</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Hilfe zum erneuten Abfragen des Master-Passworts</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Das Entsperren kann aufgrund von unzureichendem Arbeitsspeicher fehlschlagen. Verringere deine KDF-Speichereinstellungen, um das Problem zu beheben.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Ungültiger API-Schlüssel</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Ungültiger API-Token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2495,8 +2495,8 @@
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Λάβετε υπόδειξη κύριου κωδικού</value>
|
<value>Λάβετε υπόδειξη κύριου κωδικού</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Σύνδεση ως {0}</value>
|
<value>Σύνδεση ως {0} στις {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Δεν είστε εσείς;</value>
|
<value>Δεν είστε εσείς;</value>
|
||||||
@@ -2609,10 +2609,37 @@
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Δεν υπάρχουν στοιχεία που να ταιριάζουν με την αναζήτηση</value>
|
<value>Δεν υπάρχουν στοιχεία που να ταιριάζουν με την αναζήτηση</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>ΗΠΑ</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>ΕΕ</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Αυτο-φιλοξενούμενο</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Περιοχή δεδομένων</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Περιοχή</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Ο κύριος κωδικός πρόσβασής σας δεν πληροί μία ή περισσότερες πολιτικές του οργανισμού σας. Για να αποκτήσετε πρόσβαση στο Vault σας, πρέπει να ενημερώσετε τον κύριο κωδικό πρόσβασής σας τώρα. Η διαδικασία θα σας αποσυνδέσει από την τρέχουσα συνεδρία σας, απαιτώντας από εσάς να συνδεθείτε ξανά. Οι ενεργές συνεδρίες σε άλλες συσκευές ενδέχεται να συνεχίσουν να είναι ενεργές εώς και μία ώρα.</value>
|
<value>Ο κύριος κωδικός πρόσβασής σας δεν πληροί μία ή περισσότερες πολιτικές του οργανισμού σας. Για να αποκτήσετε πρόσβαση στο Vault σας, πρέπει να ενημερώσετε τον κύριο κωδικό πρόσβασής σας τώρα. Η διαδικασία θα σας αποσυνδέσει από την τρέχουσα συνεδρία σας, απαιτώντας από εσάς να συνδεθείτε ξανά. Οι ενεργές συνεδρίες σε άλλες συσκευές ενδέχεται να συνεχίσουν να είναι ενεργές εώς και μία ώρα.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Τρέχων κύριος κωδικός</value>
|
<value>Τρέχων κύριος κωδικός</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2495,8 +2495,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Get master password hint</value>
|
<value>Get master password hint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Not you?</value>
|
<value>Not you?</value>
|
||||||
@@ -2609,10 +2609,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>There are no items that match the search</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2509,8 +2509,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Get master password hint</value>
|
<value>Get master password hint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Not you?</value>
|
<value>Not you?</value>
|
||||||
@@ -2623,10 +2623,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>There are no items that match the search</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -775,10 +775,10 @@
|
|||||||
<value>Activado</value>
|
<value>Activado</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Off" xml:space="preserve">
|
<data name="Off" xml:space="preserve">
|
||||||
<value>Apagado</value>
|
<value>No</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="On" xml:space="preserve">
|
<data name="On" xml:space="preserve">
|
||||||
<value>Activado</value>
|
<value>Sí</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Status" xml:space="preserve">
|
<data name="Status" xml:space="preserve">
|
||||||
<value>Estado</value>
|
<value>Estado</value>
|
||||||
@@ -2496,8 +2496,8 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Obtener pista de contraseña maestra</value>
|
<value>Obtener pista de contraseña maestra</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Iniciando sesión como {0}</value>
|
<value>Iniciando sesión como {0} en {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>¿No eres tú?</value>
|
<value>¿No eres tú?</value>
|
||||||
@@ -2610,10 +2610,37 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>No hay elementos que coincidan con la búsqueda</value>
|
<value>No hay elementos que coincidan con la búsqueda</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>EE.UU.</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>Unión Europea</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Autoalojado</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Región de datos</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Región</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Su contraseña maestra no cumple con una o más de las políticas de su organización. Para acceder a la caja fuerte, debe actualizar su contraseña maestra ahora. Proceder le desconectará de su sesión actual, requiriendo que vuelva a iniciar sesión. Las sesiones activas en otros dispositivos pueden seguir estando activas durante hasta una hora.</value>
|
<value>Su contraseña maestra no cumple con una o más de las políticas de su organización. Para acceder a la caja fuerte, debe actualizar su contraseña maestra ahora. Proceder le desconectará de su sesión actual, requiriendo que vuelva a iniciar sesión. Las sesiones activas en otros dispositivos pueden seguir estando activas durante hasta una hora.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Contraseña maestra actual</value>
|
<value>Contraseña maestra actual</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Ayuda de volver a pedir contraseña maestra</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>El desbloqueo puede fallar por falta de memoria. Disminuye los ajustes de memoria KDF para resolver</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Clave API no válida</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Token de API no válido</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2495,8 +2495,8 @@ Soovid selle konto peale lülituda?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Tuleta ülemparooli vihjega meelde</value>
|
<value>Tuleta ülemparooli vihjega meelde</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Sisselogimas kui {0}</value>
|
<value>Sisselogimas kui {0} lehel {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Pole sina?</value>
|
<value>Pole sina?</value>
|
||||||
@@ -2609,10 +2609,37 @@ Soovid selle konto peale lülituda?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Otsingusõnale ei vasta kirjeid</value>
|
<value>Otsingusõnale ei vasta kirjeid</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>USA</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EL</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Enda majutatud</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Andmete salvestamise piirkond</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Piirkond</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Sinu ülemparool ei vasta ühele või rohkemale organisatsiooni poolt seatud poliitikale. Hoidlale ligipääsemiseks pead oma ülemaprooli uuendama. Jätkamisel logitakse sind praegusest sessioonist välja, mistõttu pead uuesti sisse logima. Teistes seadmetes olevad aktiivsed sessioonid aeguvad umbes ühe tunni jooksul.</value>
|
<value>Sinu ülemparool ei vasta ühele või rohkemale organisatsiooni poolt seatud poliitikale. Hoidlale ligipääsemiseks pead oma ülemaprooli uuendama. Jätkamisel logitakse sind praegusest sessioonist välja, mistõttu pead uuesti sisse logima. Teistes seadmetes olevad aktiivsed sessioonid aeguvad umbes ühe tunni jooksul.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Praegune ülemparool</value>
|
<value>Praegune ülemparool</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Vigane API võti</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Vigane API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -584,7 +584,7 @@
|
|||||||
<value>Pasahitz nagusia ahazten baduzu, pista batek pasahitza gogoratzen lagunduko dizu.</value>
|
<value>Pasahitz nagusia ahazten baduzu, pista batek pasahitza gogoratzen lagunduko dizu.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
|
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
|
||||||
<value>Master password must be at least {0} characters long.</value>
|
<value>Pasahitz nagusiak {0} karaktere izan behar ditu gutxienez.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MinNumbers" xml:space="preserve">
|
<data name="MinNumbers" xml:space="preserve">
|
||||||
<value>Gutxieneko zenbaki kopurua</value>
|
<value>Gutxieneko zenbaki kopurua</value>
|
||||||
@@ -1752,10 +1752,10 @@
|
|||||||
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
|
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountBiometricInvalidated" xml:space="preserve">
|
<data name="AccountBiometricInvalidated" xml:space="preserve">
|
||||||
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
|
<value>Desblokeatze biometrikoa desgaituta dago kontu honentzat, pasahitz nagusia egiaztatzeko zain.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
|
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
|
||||||
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
|
<value>Desblokeatze biometriko automatikoa desgaituta dago kontu honentzat, pasahitz nagusia egiaztatzeko zain.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnableSyncOnRefresh" xml:space="preserve">
|
<data name="EnableSyncOnRefresh" xml:space="preserve">
|
||||||
<value>Gaitu eguneratzean sinkronizatzea</value>
|
<value>Gaitu eguneratzean sinkronizatzea</value>
|
||||||
@@ -2494,8 +2494,8 @@ Kontu honetara aldatu nahi duzu?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Jaso pasahitz nagusiaren pista</value>
|
<value>Jaso pasahitz nagusiaren pista</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>{0} bezala hasi saioa</value>
|
<value>{0} bezala saioa hasten {1}(e)n</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Ez zara zu?</value>
|
<value>Ez zara zu?</value>
|
||||||
@@ -2531,31 +2531,31 @@ Kontu honetara aldatu nahi duzu?</value>
|
|||||||
<value>Pending login requests</value>
|
<value>Pending login requests</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DeclineAllRequests" xml:space="preserve">
|
<data name="DeclineAllRequests" xml:space="preserve">
|
||||||
<value>Decline all requests</value>
|
<value>Ukatu eskaera guztiak</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AreYouSureYouWantToDeclineAllPendingLogInRequests" xml:space="preserve">
|
<data name="AreYouSureYouWantToDeclineAllPendingLogInRequests" xml:space="preserve">
|
||||||
<value>Are you sure you want to decline all pending login requests?</value>
|
<value>Ziur al zaude zain dauden saioa hasteko eskaera guztiak ukatu nahi dituzula?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RequestsDeclined" xml:space="preserve">
|
<data name="RequestsDeclined" xml:space="preserve">
|
||||||
<value>Requests declined</value>
|
<value>Eskaerak ukatuta</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoPendingRequests" xml:space="preserve">
|
<data name="NoPendingRequests" xml:space="preserve">
|
||||||
<value>No pending requests</value>
|
<value>Ez dago eskaerarik zain</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
|
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
|
||||||
<value>Gaitu kameraren baimena eskanerra erabiltzeko</value>
|
<value>Gaitu kameraren baimena eskanerra erabiltzeko</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Language" xml:space="preserve">
|
<data name="Language" xml:space="preserve">
|
||||||
<value>Language</value>
|
<value>Hizkuntza</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LanguageChangeXDescription" xml:space="preserve">
|
<data name="LanguageChangeXDescription" xml:space="preserve">
|
||||||
<value>The language has been changed to {0}. Please restart the app to see the change</value>
|
<value>{0} hizkuntza ezarri da. Berrabiarazi aplikazioa mesedez aldaketa ikusi ahal izateko</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
|
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
|
||||||
<value>Language change requires app restart</value>
|
<value>Hizkuntza aldatzeak aplikazioa berabiaraztea behar du</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DefaultSystem" xml:space="preserve">
|
<data name="DefaultSystem" xml:space="preserve">
|
||||||
<value>Default (System)</value>
|
<value>Lehenetsia (Sistema)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Important" xml:space="preserve">
|
<data name="Important" xml:space="preserve">
|
||||||
<value>Garrantzitsua</value>
|
<value>Garrantzitsua</value>
|
||||||
@@ -2594,7 +2594,7 @@ Kontu honetara aldatu nahi duzu?</value>
|
|||||||
<value>Pasahitz ahul hau datu-urraketa batean aurkitu da. Erabil ezazu beste inon erabili ez duzun pasahitz sendi bat zure kontua babesteko. Ziur zaude pasahitz hau erabili nahi duzula?</value>
|
<value>Pasahitz ahul hau datu-urraketa batean aurkitu da. Erabil ezazu beste inon erabili ez duzun pasahitz sendi bat zure kontua babesteko. Ziur zaude pasahitz hau erabili nahi duzula?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
|
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
|
||||||
<value>Organization SSO identifier required.</value>
|
<value>Erakundearen identifikazio bakarra (SSO) beharrezkoa da.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
|
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
|
||||||
<value>Add the key to an existing or new item</value>
|
<value>Add the key to an existing or new item</value>
|
||||||
@@ -2603,15 +2603,42 @@ Kontu honetara aldatu nahi duzu?</value>
|
|||||||
<value>There are no items in your vault that match "{0}"</value>
|
<value>There are no items in your vault that match "{0}"</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
|
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
|
||||||
<value>Search for an item or add a new item</value>
|
<value>Bilatu elementu bat ala gehitu elementu berria</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>Ez dago bilaketarekin bat datorren emaitzarik</value>
|
||||||
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>AEB</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Eskualdea</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Uneko pasahitz nagusia</value>
|
||||||
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2496,8 +2496,8 @@
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>دریافت یادآور کلمه عبور اصلی</value>
|
<value>دریافت یادآور کلمه عبور اصلی</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>در حال ورود به عنوان {0}</value>
|
<value>درحال وارد شدن به عنوان {0} در {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>شما نیستید؟</value>
|
<value>شما نیستید؟</value>
|
||||||
@@ -2610,10 +2610,37 @@
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>هیچ موردی وجود ندارد که با جستجو مطابقت داشته باشد</value>
|
<value>هیچ موردی وجود ندارد که با جستجو مطابقت داشته باشد</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>امریکا</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>اروپا</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>خود میزبان</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>منطقه داده</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>منطقه</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>کلمه عبور اصلی شما با یک یا چند سیاست سازمانتان مطابقت ندارد. برای دسترسی به گاوصندوق، باید همین حالا کلمه عبور اصلی خود را بهروز کنید. در صورت ادامه، شما از نشست فعلی خود خارج میشوید و باید دوباره وارد سیستم شوید. نشست فعال در دستگاه های دیگر ممکن است تا یک ساعت همچنان فعال باقی بمانند.</value>
|
<value>کلمه عبور اصلی شما با یک یا چند سیاست سازمانتان مطابقت ندارد. برای دسترسی به گاوصندوق، باید همین حالا کلمه عبور اصلی خود را بهروز کنید. در صورت ادامه، شما از نشست فعلی خود خارج میشوید و باید دوباره وارد سیستم شوید. نشست فعال در دستگاه های دیگر ممکن است تا یک ساعت همچنان فعال باقی بمانند.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>کلمه عبور اصلی فعلی</value>
|
<value>کلمه عبور اصلی فعلی</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>راهنمای درخواست مجدد کلمه عبور اصلی</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>باز کردن قفل ممکن است به دلیل حافظه ناکافی انجام شود. تنظیمات حافظه KDF خود را کاهش دهید تا حل شود.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>کلید API نامعتبر</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>کلید توکن API نامعتبر</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -937,7 +937,7 @@ Koodi luetaan automaattisesti.</value>
|
|||||||
<value>Tiedosto</value>
|
<value>Tiedosto</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoFileChosen" xml:space="preserve">
|
<data name="NoFileChosen" xml:space="preserve">
|
||||||
<value>Ei valittua tiedostoa</value>
|
<value>Tiedostoa ei ole valittu.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoAttachments" xml:space="preserve">
|
<data name="NoAttachments" xml:space="preserve">
|
||||||
<value>Ei liitteitä.</value>
|
<value>Ei liitteitä.</value>
|
||||||
@@ -1492,7 +1492,7 @@ Koodi luetaan automaattisesti.</value>
|
|||||||
<value>Aseta PIN-koodi Bitwardenin avaukselle. PIN-asetukset tyhjentyvät, jos kirjaudut kokonaan ulos sovelluksesta.</value>
|
<value>Aseta PIN-koodi Bitwardenin avaukselle. PIN-asetukset tyhjentyvät, jos kirjaudut kokonaan ulos sovelluksesta.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggedInAsOn" xml:space="preserve">
|
<data name="LoggedInAsOn" xml:space="preserve">
|
||||||
<value>Kirjautui tunnuksella {0} palvelimelle {1}.</value>
|
<value>Kirjautui palvelimelle {1} tunnuksella {0}.</value>
|
||||||
<comment>ex: Logged in as user@example.com on bitwarden.com.</comment>
|
<comment>ex: Logged in as user@example.com on bitwarden.com.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultLockedMasterPassword" xml:space="preserve">
|
<data name="VaultLockedMasterPassword" xml:space="preserve">
|
||||||
@@ -1762,7 +1762,7 @@ Koodi luetaan automaattisesti.</value>
|
|||||||
<value>Synkronoi holvi päivityksen yhteydessä</value>
|
<value>Synkronoi holvi päivityksen yhteydessä</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnableSyncOnRefreshDescription" xml:space="preserve">
|
<data name="EnableSyncOnRefreshDescription" xml:space="preserve">
|
||||||
<value>Synkronoidaan holvi alasveto-eleellä.</value>
|
<value>Holvi synkronoidaan myös alasveto-eleellä suoritettavan päivityksen yhteydessä.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInSso" xml:space="preserve">
|
<data name="LogInSso" xml:space="preserve">
|
||||||
<value>Yrityksen kertakirjautuminen (SSO)</value>
|
<value>Yrityksen kertakirjautuminen (SSO)</value>
|
||||||
@@ -2367,7 +2367,7 @@ turvallisesti valitsemalla "Lisää TOTP"</value>
|
|||||||
<value>Hyväksy kirjautumispyyntöjä</value>
|
<value>Hyväksy kirjautumispyyntöjä</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseThisDeviceToApproveLoginRequestsMadeFromOtherDevices" xml:space="preserve">
|
<data name="UseThisDeviceToApproveLoginRequestsMadeFromOtherDevices" xml:space="preserve">
|
||||||
<value>Hyväksy muiden laitteiden kirjautumispyynnöt tältä laitteelta.</value>
|
<value>Hyväksy laitteiden kirjautumispyyntöjä tältä laitteelta</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AllowNotifications" xml:space="preserve">
|
<data name="AllowNotifications" xml:space="preserve">
|
||||||
<value>Salli ilmoitukset</value>
|
<value>Salli ilmoitukset</value>
|
||||||
@@ -2496,8 +2496,8 @@ Haluatko vaihtaa tähän tiliin?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Pyydä pääsalasanan vihjettä</value>
|
<value>Pyydä pääsalasanan vihjettä</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Kirjaudutaan tunnuksella {0}</value>
|
<value>Kirjaudutaan palvelimelle {1} tunnuksella {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Etkö se ollut sinä?</value>
|
<value>Etkö se ollut sinä?</value>
|
||||||
@@ -2542,7 +2542,7 @@ Haluatko vaihtaa tähän tiliin?</value>
|
|||||||
<value>Pyynnöt hylättiin</value>
|
<value>Pyynnöt hylättiin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoPendingRequests" xml:space="preserve">
|
<data name="NoPendingRequests" xml:space="preserve">
|
||||||
<value>Ei odottavia pyyntöjä</value>
|
<value>Odottavia pyyntöjä ei ole</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
|
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
|
||||||
<value>Myönnä kameran käyttöoikeus skannerin käyttämiseksi</value>
|
<value>Myönnä kameran käyttöoikeus skannerin käyttämiseksi</value>
|
||||||
@@ -2554,7 +2554,7 @@ Haluatko vaihtaa tähän tiliin?</value>
|
|||||||
<value>Kieleksi vaihdettiin {0}. Käynnistä sovellus uudelleen nähdäksesi muutoksen.</value>
|
<value>Kieleksi vaihdettiin {0}. Käynnistä sovellus uudelleen nähdäksesi muutoksen.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
|
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
|
||||||
<value>Kielen vaihto edellyttää sovelluksen uudelleenkäynnistyksen</value>
|
<value>Kielen vaihto vaatii sovelluksen uudelleenkäynnistyksen.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DefaultSystem" xml:space="preserve">
|
<data name="DefaultSystem" xml:space="preserve">
|
||||||
<value>Oletus (järjestelmä)</value>
|
<value>Oletus (järjestelmä)</value>
|
||||||
@@ -2610,10 +2610,37 @@ Haluatko vaihtaa tähän tiliin?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Hakua vastaavia kohteita ei ole</value>
|
<value>Hakua vastaavia kohteita ei ole</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Itse ylläpidetty</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Tietoalue</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Alue</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Pääsalasanasi ei täytä yhden tai useamman organisaatiokäytännön vaatimuksia ja holvin käyttämiseksi sinun on vaihdettava se nyt. Tämä uloskirjaa kaikki nykyiset istunnot pakottaen uudelleenkirjautumisen. Muiden laitteiden aktiiviset istunnot saattavat toimia vielä tunnin ajan.</value>
|
<value>Pääsalasanasi ei täytä yhden tai useamman organisaatiokäytännön vaatimuksia ja holvin käyttämiseksi sinun on vaihdettava se nyt. Tämä uloskirjaa kaikki nykyiset istunnot pakottaen uudelleenkirjautumisen. Muiden laitteiden aktiiviset istunnot saattavat toimia vielä tunnin ajan.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Nykyinen pääsalasana</value>
|
<value>Nykyinen pääsalasana</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Pääsalasanan uudelleenkyselyn ohje</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Lukituksen avaus voi epäonnistua riittämättömän keskusmuistin vuoksi. Korjaa madaltamalla KDF-muistiasetuksiasi.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Virheellinen API-avain</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Virheellinen API-tunniste</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2496,8 +2496,8 @@ Gusto mo bang pumunta sa account na ito?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Kunin ang palatandaan ng master password</value>
|
<value>Kunin ang palatandaan ng master password</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Nagla-log in bilang si {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Hindi ikaw?</value>
|
<value>Hindi ikaw?</value>
|
||||||
@@ -2610,10 +2610,37 @@ Gusto mo bang pumunta sa account na ito?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Walang mga item na tumutugma sa paghahanap</value>
|
<value>Walang mga item na tumutugma sa paghahanap</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2496,8 +2496,8 @@ Voulez-vous basculer vers ce compte ?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Obtenir l'indice du mot de passe principal</value>
|
<value>Obtenir l'indice du mot de passe principal</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Connecté en tant que {0}</value>
|
<value>Connexion en tant que {0} sur {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Ce n'est pas vous ?</value>
|
<value>Ce n'est pas vous ?</value>
|
||||||
@@ -2610,10 +2610,37 @@ Voulez-vous basculer vers ce compte ?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Il n'y a pas d'éléments qui correspondent à la recherche</value>
|
<value>Il n'y a pas d'éléments qui correspondent à la recherche</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Auto-hébergé</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Région des données</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Région</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Votre mot de passe principal ne répond pas aux exigences de politique de sécurité de cette organisation. Pour accéder au coffre, vous devez mettre à jour votre mot de passe principal dès maintenant. En poursuivant, vous serez déconnecté de votre session actuelle et vous devrez vous reconnecter. Les sessions actives sur d'autres appareils peuver rester actives pendant encore une heure.</value>
|
<value>Votre mot de passe principal ne répond pas aux exigences de politique de sécurité de cette organisation. Pour accéder au coffre, vous devez mettre à jour votre mot de passe principal dès maintenant. En poursuivant, vous serez déconnecté de votre session actuelle et vous devrez vous reconnecter. Les sessions actives sur d'autres appareils peuver rester actives pendant encore une heure.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Mot de passe principal actuel</value>
|
<value>Mot de passe principal actuel</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Aide sur la ressaisie du mot de passe principal</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Le déverrouillage peut échouer en raison d'une mémoire insuffisante. Diminuez les paramètres de mémoire KDF pour y remédier</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Clé API invalide</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Jeton API invalide</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2496,8 +2496,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Get master password hint</value>
|
<value>Get master password hint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Not you?</value>
|
<value>Not you?</value>
|
||||||
@@ -2610,10 +2610,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>There are no items that match the search</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2498,8 +2498,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Get master password hint</value>
|
<value>Get master password hint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Not you?</value>
|
<value>Not you?</value>
|
||||||
@@ -2612,10 +2612,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>There are no items that match the search</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -168,7 +168,7 @@
|
|||||||
<comment>Delete an entity (verb).</comment>
|
<comment>Delete an entity (verb).</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Deleting" xml:space="preserve">
|
<data name="Deleting" xml:space="preserve">
|
||||||
<value>मिटाया जा रहा हैं...</value>
|
<value>मिटा रहे है...</value>
|
||||||
<comment>Message shown when interacting with the server</comment>
|
<comment>Message shown when interacting with the server</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="DoYouReallyWantToDelete" xml:space="preserve">
|
<data name="DoYouReallyWantToDelete" xml:space="preserve">
|
||||||
@@ -261,19 +261,19 @@
|
|||||||
<comment>The button text that allows user to launch the website to their web browser.</comment>
|
<comment>The button text that allows user to launch the website to their web browser.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogIn" xml:space="preserve">
|
<data name="LogIn" xml:space="preserve">
|
||||||
<value>लॉग इन करें</value>
|
<value>लॉगइन करें</value>
|
||||||
<comment>The login button text (verb).</comment>
|
<comment>The login button text (verb).</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInNoun" xml:space="preserve">
|
<data name="LogInNoun" xml:space="preserve">
|
||||||
<value>लॉग इन</value>
|
<value>लॉगइन करें</value>
|
||||||
<comment>Title for login page. (noun)</comment>
|
<comment>Title for login page. (noun)</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogOut" xml:space="preserve">
|
<data name="LogOut" xml:space="preserve">
|
||||||
<value>लॉग आउट करें</value>
|
<value>लॉगआउट करें</value>
|
||||||
<comment>The log out button text (verb).</comment>
|
<comment>The log out button text (verb).</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogoutConfirmation" xml:space="preserve">
|
<data name="LogoutConfirmation" xml:space="preserve">
|
||||||
<value>पक्का लॉग आउट करें?</value>
|
<value>पक्का लॉगआउट करें?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RemoveAccount" xml:space="preserve">
|
<data name="RemoveAccount" xml:space="preserve">
|
||||||
<value>खाता हटाएं</value>
|
<value>खाता हटाएं</value>
|
||||||
@@ -285,14 +285,14 @@
|
|||||||
<value>खाता पहले से जोड़ा गया</value>
|
<value>खाता पहले से जोड़ा गया</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SwitchToAlreadyAddedAccountConfirmation" xml:space="preserve">
|
<data name="SwitchToAlreadyAddedAccountConfirmation" xml:space="preserve">
|
||||||
<value>अभी खाता इस्तेमाल करें?</value>
|
<value>खाता अभी इस्तेमाल करें?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPassword" xml:space="preserve">
|
<data name="MasterPassword" xml:space="preserve">
|
||||||
<value>मुख्य पासवर्ड</value>
|
<value>मुख्य पासवर्ड</value>
|
||||||
<comment>Label for a master password.</comment>
|
<comment>Label for a master password.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="More" xml:space="preserve">
|
<data name="More" xml:space="preserve">
|
||||||
<value>और</value>
|
<value>ज़्यादा</value>
|
||||||
<comment>Text to define that there are more options things to see.</comment>
|
<comment>Text to define that there are more options things to see.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="MyVault" xml:space="preserve">
|
<data name="MyVault" xml:space="preserve">
|
||||||
@@ -330,7 +330,7 @@
|
|||||||
<value>ले जाएं</value>
|
<value>ले जाएं</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Saving" xml:space="preserve">
|
<data name="Saving" xml:space="preserve">
|
||||||
<value>सेव हो रहा है...</value>
|
<value>सेव कर रहे है...</value>
|
||||||
<comment>Message shown when interacting with the server</comment>
|
<comment>Message shown when interacting with the server</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Settings" xml:space="preserve">
|
<data name="Settings" xml:space="preserve">
|
||||||
@@ -394,7 +394,7 @@
|
|||||||
<value>देखें</value>
|
<value>देखें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VisitOurWebsite" xml:space="preserve">
|
<data name="VisitOurWebsite" xml:space="preserve">
|
||||||
<value>हमारी वेबसाइट पर जाएं</value>
|
<value>हमारे वेबसाइट पर जाएं</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VisitOurWebsiteDescription" xml:space="preserve">
|
<data name="VisitOurWebsiteDescription" xml:space="preserve">
|
||||||
<value>मदद लेने, खबर लेने, हमें ईमेल करने, और/या बिटवार्डन के इस्तेमाल के बारे में ज़्यादा जानने के लिए हमारी वेबसाइट पर जाएं।</value>
|
<value>मदद लेने, खबर लेने, हमें ईमेल करने, और/या बिटवार्डन के इस्तेमाल के बारे में ज़्यादा जानने के लिए हमारी वेबसाइट पर जाएं।</value>
|
||||||
@@ -410,7 +410,7 @@
|
|||||||
<value>खाता</value>
|
<value>खाता</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountCreated" xml:space="preserve">
|
<data name="AccountCreated" xml:space="preserve">
|
||||||
<value>आपका नया खाता बनाया गया! अब आप लॉग इन कर सकते हैं।</value>
|
<value>आपका नया खाता बनाया गया! अब लॉगइन कर सकते हैं।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AddAnItem" xml:space="preserve">
|
<data name="AddAnItem" xml:space="preserve">
|
||||||
<value>चीज़ जोड़ें</value>
|
<value>चीज़ जोड़ें</value>
|
||||||
@@ -419,40 +419,40 @@
|
|||||||
<value>ऐप एक्सटेंशन</value>
|
<value>ऐप एक्सटेंशन</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillAccessibilityDescription" xml:space="preserve">
|
<data name="AutofillAccessibilityDescription" xml:space="preserve">
|
||||||
<value>Use the bitwarden accessibility service to auto-fill your logins across apps and the web.</value>
|
<value>दूसरे ऐप और वेबसाइट पर अपनेआप लॉगइन भरने के लिए बिटवार्डन सुलभता सेवा इस्तेमाल करें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillService" xml:space="preserve">
|
<data name="AutofillService" xml:space="preserve">
|
||||||
<value>भरण सेवा</value>
|
<value>अपनेआप-भर सेवा</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||||
<value>अस्पष्ट अक्षर से बचें</value>
|
<value>अस्पष्ट अक्षर से बचें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtension" xml:space="preserve">
|
<data name="BitwardenAppExtension" xml:space="preserve">
|
||||||
<value>bitwarden App Extension</value>
|
<value>बिटवार्डन ऐप एक्सटेंशन</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
||||||
<value>अपने तिजोरी में नए आइटम डालने का सबसे सरल तरीका है Bitwarden ऐप विस्तारण। Bitwarden ऐप विस्तरण के उपयोग संबंधी जानकारी पाने के लिए "सेटिंग्स" में जाएं।</value>
|
<value>बिटवार्डन ऐप एक्सटेंशन तिजोरी में नए चीज़ डालने का सबसे आसात तरीका है। बिटवार्डन ऐप एक्सटेंशन के इस्तेमाल से जुड़ी जानकारी लेने के लिए "सेटिंग" में जाएं।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
|
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
|
||||||
<value>Use bitwarden in Safari and other apps to auto-fill your logins.</value>
|
<value>सफारी और दूसरे ऐप में अपने लॉगइन अपनेआप भरने के लिए बिटवार्डन इस्तेमाल करें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillService" xml:space="preserve">
|
<data name="BitwardenAutofillService" xml:space="preserve">
|
||||||
<value>bitwarden Auto-fill Service</value>
|
<value>बिटवार्डन अपनेआप-भर सेवा</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillAccessibilityServiceDescription" xml:space="preserve">
|
<data name="BitwardenAutofillAccessibilityServiceDescription" xml:space="preserve">
|
||||||
<value>Use the bitwarden accessibility service to auto-fill your logins.</value>
|
<value>अपने लॉगइन अपनेआप भरने के लिए बिटवार्डन सुलभता सेवा इस्तेमाल करें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeEmail" xml:space="preserve">
|
<data name="ChangeEmail" xml:space="preserve">
|
||||||
<value>ईमेल बदलें</value>
|
<value>ईमेल बदलें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeEmailConfirmation" xml:space="preserve">
|
<data name="ChangeEmailConfirmation" xml:space="preserve">
|
||||||
<value>आप bitwarden.com वेब तिजोरी पर आपका ईमेल पता परिवर्तित कर सकते हैं। आप अब वेबसाइट पर जाएँ करने के लिए चाहते हैं?</value>
|
<value>Bitwarden.com वेब तिजोरी पर ईमेल पता बदला जा सकता है। इस वेबसाइट पर अभी जाएं?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeMasterPassword" xml:space="preserve">
|
<data name="ChangeMasterPassword" xml:space="preserve">
|
||||||
<value>मास्टर पासवर्ड बदलें</value>
|
<value>मुख्य पासवर्ड बदलें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangePasswordConfirmation" xml:space="preserve">
|
<data name="ChangePasswordConfirmation" xml:space="preserve">
|
||||||
<value>मास्टर पासवर्ड Bitwarden के वेब-तिजोरी पर जाकर बदला जा सकता है। क्या आप वहां जाना चाहते हैं?</value>
|
<value>मुख्य पासवर्ड बिटवार्डन वेब तिजोरी पर जाकर बदला जा सकता है। वेबसाइट पर अभी जाएं?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Close" xml:space="preserve">
|
<data name="Close" xml:space="preserve">
|
||||||
<value>बंद करें</value>
|
<value>बंद करें</value>
|
||||||
@@ -461,75 +461,75 @@
|
|||||||
<value>जारी रखें</value>
|
<value>जारी रखें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CreateAccount" xml:space="preserve">
|
<data name="CreateAccount" xml:space="preserve">
|
||||||
<value>खाता बनाएँ</value>
|
<value>खाता बनाएं</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CreatingAccount" xml:space="preserve">
|
<data name="CreatingAccount" xml:space="preserve">
|
||||||
<value>खाता बना रहें है...</value>
|
<value>खाता बना रहे है...</value>
|
||||||
<comment>Message shown when interacting with the server</comment>
|
<comment>Message shown when interacting with the server</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="EditItem" xml:space="preserve">
|
<data name="EditItem" xml:space="preserve">
|
||||||
<value>आइटम संपादित करें</value>
|
<value>चीज़ बदलाव करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnableAutomaticSyncing" xml:space="preserve">
|
<data name="EnableAutomaticSyncing" xml:space="preserve">
|
||||||
<value>स्वतः सिंक चालू करें।</value>
|
<value>अपनेआप-सिंक की अनुमति दें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnterEmailForHint" xml:space="preserve">
|
<data name="EnterEmailForHint" xml:space="preserve">
|
||||||
<value>अपने मास्टर पासवर्ड संकेत प्राप्त करने के लिए अपने खाते का ईमेल पता दर्ज करें।</value>
|
<value>मुख्य पासवर्ड इशारा लेने के लिए अपने खाते का ईमेल पता डालें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExntesionReenable" xml:space="preserve">
|
<data name="ExntesionReenable" xml:space="preserve">
|
||||||
<value>ऐप विस्तारण को फिर चालू करें</value>
|
<value>ऐप एक्सटेंशन वापस चालू करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionAlmostDone" xml:space="preserve">
|
<data name="ExtensionAlmostDone" xml:space="preserve">
|
||||||
<value>लगभग सम्पूर्ण!</value>
|
<value>करीब-करीब खत्म!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionEnable" xml:space="preserve">
|
<data name="ExtensionEnable" xml:space="preserve">
|
||||||
<value>ऐप विस्तारण को चालू करें</value>
|
<value>ऐप एक्सटेंशन चालू करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionInSafari" xml:space="preserve">
|
<data name="ExtensionInSafari" xml:space="preserve">
|
||||||
<value>In Safari, find bitwarden using the share icon (hint: scroll to the right on the bottom row of the menu).</value>
|
<value>सफारी में, शेयर आइकन से बिटवार्डन का पता लगाएं (इशारा: मेन्यू के सबसे निचले पट्टी पर दाएं तरफ जाएं)।</value>
|
||||||
<comment>Safari is the name of apple's web browser</comment>
|
<comment>Safari is the name of apple's web browser</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionInstantAccess" xml:space="preserve">
|
<data name="ExtensionInstantAccess" xml:space="preserve">
|
||||||
<value>अपने पासवर्ड को तुरंत प्राप्त करें</value>
|
<value>अपने पासवर्ड को तुरंत एक्सेस करें!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionReady" xml:space="preserve">
|
<data name="ExtensionReady" xml:space="preserve">
|
||||||
<value>आप लॉग इन करने के लिए तैयार हैं!</value>
|
<value>आप लॉगइन करने के लिए तैयार हैं!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionSetup" xml:space="preserve">
|
<data name="ExtensionSetup" xml:space="preserve">
|
||||||
<value>Your logins are now easily accessable from Safari, Chrome, and other supported apps.</value>
|
<value>अब सफारी, क्रोम, और दूसरे सपोर्ट किए गए ऐप से लॉगइन आसानी से एक्सेस किए जा सकते है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionSetup2" xml:space="preserve">
|
<data name="ExtensionSetup2" xml:space="preserve">
|
||||||
<value>In Safari and Chrome, find bitwarden using the share icon (hint: scroll to the right on the bottom row of the share menu).</value>
|
<value>सफारी और क्रोम में, शेयर आइकन से बिटवार्डन का पता लगाएं (इशारा: मेन्यू के सबसे निचले पट्टी पर दाएं तरफ जाएं)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionTapIcon" xml:space="preserve">
|
<data name="ExtensionTapIcon" xml:space="preserve">
|
||||||
<value>Tap the bitwarden icon in the menu to launch the extension.</value>
|
<value>एक्सटेंशन खोलने के लिए मेन्यू में बिटवार्डन आइकन पर दबाएं।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionTurnOn" xml:space="preserve">
|
<data name="ExtensionTurnOn" xml:space="preserve">
|
||||||
<value>To turn on bitwarden in Safari and other apps, tap the "more" icon on the bottom row of the menu.</value>
|
<value>सफारी और दूसरे ऐप में बिटवार्डन चालू करने के लिए, मेन्यू के सबसे निचले पट्टी में "ज़्यादा" आइकन दबाएं।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Favorite" xml:space="preserve">
|
<data name="Favorite" xml:space="preserve">
|
||||||
<value>पसंदीदा</value>
|
<value>मनपसंद</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Fingerprint" xml:space="preserve">
|
<data name="Fingerprint" xml:space="preserve">
|
||||||
<value>फिंगरप्रिंट</value>
|
<value>फिंगरप्रिंट</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GeneratePassword" xml:space="preserve">
|
<data name="GeneratePassword" xml:space="preserve">
|
||||||
<value>पासवर्ड उत्पन्न करें</value>
|
<value>पासवर्ड बनाएं</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GetPasswordHint" xml:space="preserve">
|
<data name="GetPasswordHint" xml:space="preserve">
|
||||||
<value>मास्टर पासवर्ड संकेत प्राप्त करें</value>
|
<value>मुख्य पासवर्ड इशारा लें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ImportItems" xml:space="preserve">
|
<data name="ImportItems" xml:space="preserve">
|
||||||
<value>आइटम्स आयात करें</value>
|
<value>चीज़ आयात करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ImportItemsConfirmation" xml:space="preserve">
|
<data name="ImportItemsConfirmation" xml:space="preserve">
|
||||||
<value>Bitwarden के वेब-तिजोरी से एक साथ कई आइटम आयातित किए जा सकते हैं। क्या आप वहां जाना चाहते हैं?</value>
|
<value>Bitwarden.com वेब तिजोरी से थोक में चीज़ आयात किए जा सकते हैं। वेबसाइट पर अभी जाएं?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ImportItemsDescription" xml:space="preserve">
|
<data name="ImportItemsDescription" xml:space="preserve">
|
||||||
<value>दूसरे पासवर्ड प्रबंधन ऐप से एक साथ कई आइटम जल्दी आयातित करें।</value>
|
<value>दूसरे पासवर्ड मैनेजमेंट ऐप से थोक में चीज़ जल्दी आयात करें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LastSync" xml:space="preserve">
|
<data name="LastSync" xml:space="preserve">
|
||||||
<value>आखिरी बार सिंक हुआ:</value>
|
<value>आखिरी सिंक:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Length" xml:space="preserve">
|
<data name="Length" xml:space="preserve">
|
||||||
<value>लंबाई</value>
|
<value>लंबाई</value>
|
||||||
@@ -538,7 +538,7 @@
|
|||||||
<value>लॉक</value>
|
<value>लॉक</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FifteenMinutes" xml:space="preserve">
|
<data name="FifteenMinutes" xml:space="preserve">
|
||||||
<value>15 मिनिट</value>
|
<value>15 मिनट</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OneHour" xml:space="preserve">
|
<data name="OneHour" xml:space="preserve">
|
||||||
<value>1 घंटा</value>
|
<value>1 घंटा</value>
|
||||||
@@ -550,87 +550,86 @@
|
|||||||
<value>4 घंटे</value>
|
<value>4 घंटे</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Immediately" xml:space="preserve">
|
<data name="Immediately" xml:space="preserve">
|
||||||
<value>तत्काल
|
<value>तुरंत</value>
|
||||||
</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeout" xml:space="preserve">
|
<data name="VaultTimeout" xml:space="preserve">
|
||||||
<value>तिजोरी का समय समाप्त</value>
|
<value>तिजोरी वक्त खत्म</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutAction" xml:space="preserve">
|
<data name="VaultTimeoutAction" xml:space="preserve">
|
||||||
<value>तिजोरी का समय समाप्त</value>
|
<value>तिजोरी वक्त खत्म</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
||||||
<value>लॉग आउट करने से तिजोरी में प्रवेश संभव नहीं होगा और समय समाप्त होने के बाद ऑनलाइन प्रमाणीकरण की आश्यकता होगी। आप इस सेटिंग्स को प्रयोग करने के लिए विश्वस्त हैं?</value>
|
<value>लॉगआउट करने के बाद तिजोरी में जाना मुमकिन नहीं होगा और वक्त खत्म होने के बाद ऑनलाइन सत्यापन की ज़रूरत होगी। इस सेटिंग को पक्का इस्तेमाल करें?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingIn" xml:space="preserve">
|
<data name="LoggingIn" xml:space="preserve">
|
||||||
<value>लॉगिन कर रहा है...</value>
|
<value>लॉगइन कर रहे है...</value>
|
||||||
<comment>Message shown when interacting with the server</comment>
|
<comment>Message shown when interacting with the server</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoginOrCreateNewAccount" xml:space="preserve">
|
<data name="LoginOrCreateNewAccount" xml:space="preserve">
|
||||||
<value>सुरक्षित तिजोरी में प्रवेश करने के लिए नया खाता बनाएं या लॉग इन करें।</value>
|
<value>अपनी महफूज़ तिजोरी एक्सेस करने के लिए नया खाता बनाएं या लॉगइन करें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Manage" xml:space="preserve">
|
<data name="Manage" xml:space="preserve">
|
||||||
<value>प्रबंधन</value>
|
<value>मैनेज करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordConfirmationValMessage" xml:space="preserve">
|
<data name="MasterPasswordConfirmationValMessage" xml:space="preserve">
|
||||||
<value>पासवर्ड गलत है।</value>
|
<value>पासवर्ड गलत है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordDescription" xml:space="preserve">
|
<data name="MasterPasswordDescription" xml:space="preserve">
|
||||||
<value>मास्टर पासवर्ड वह पासवर्ड है जो तिजोरी में प्रवेश के लिए प्रयोग होता है। आप मास्टर पासवर्ड ना भूले यह अतिआवश्यक है। भूलने की अवस्था में पासवर्ड को दोबारा पाना संभव नहीं होगा।</value>
|
<value>मुख्य पासवर्ड वो पासवर्ड है जो तिजोरी एक्सेस करने के लिए इस्तेमाल होता है। मुख्य पासवर्ड ना भूलना बहुत ज़रूरी है। भूलने के बाद पासवर्ड वापस पाना मुमकिन नहीं होगा।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordHint" xml:space="preserve">
|
<data name="MasterPasswordHint" xml:space="preserve">
|
||||||
<value>मास्टर पासवर्ड संकेत (वैकल्पिक)</value>
|
<value>मुख्य पासवर्ड इशारा (ज़रूरी नहीं)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordHintDescription" xml:space="preserve">
|
<data name="MasterPasswordHintDescription" xml:space="preserve">
|
||||||
<value>मास्टर पासवर्ड संकेत आपको भूल जाने की अवस्था में पासवर्ड को याद करने में सहायता करता है।</value>
|
<value>मुख्य पासवर्ड इशारा आपको पासवर्ड भूल जाने के स्थिति में उसको याद करने में मदद करता है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
|
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
|
||||||
<value>Master password must be at least {0} characters long.</value>
|
<value>मुख्य पासवर्ड कम-से-कम {0} अक्षर लंबा होना चाहिए।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MinNumbers" xml:space="preserve">
|
<data name="MinNumbers" xml:space="preserve">
|
||||||
<value>कम से कम अंक</value>
|
<value>कम-से-कम अंक</value>
|
||||||
<comment>Minimum numeric characters for password generator settings</comment>
|
<comment>Minimum numeric characters for password generator settings</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="MinSpecial" xml:space="preserve">
|
<data name="MinSpecial" xml:space="preserve">
|
||||||
<value>कम से कम विशेष अक्षर</value>
|
<value>कम-से-कम खास अक्षर</value>
|
||||||
<comment>Minimum special characters for password generator settings</comment>
|
<comment>Minimum special characters for password generator settings</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="MoreSettings" xml:space="preserve">
|
<data name="MoreSettings" xml:space="preserve">
|
||||||
<value>अधिक सेटिंग्स</value>
|
<value>ज़्यादा सेटिंग</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MustLogInMainApp" xml:space="preserve">
|
<data name="MustLogInMainApp" xml:space="preserve">
|
||||||
<value>You must log into the main bitwarden app before you can use the extension.</value>
|
<value>एक्सटेशन इस्तेमाल करने से पहले मुख्य बिटवार्डन ऐप में लॉगइन करना पड़ेगा।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Never" xml:space="preserve">
|
<data name="Never" xml:space="preserve">
|
||||||
<value>कभी नहीं</value>
|
<value>कभी नहीं</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NewItemCreated" xml:space="preserve">
|
<data name="NewItemCreated" xml:space="preserve">
|
||||||
<value>नया आइटम बनाया गया</value>
|
<value>नया चीज़ बनाया गया</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoFavorites" xml:space="preserve">
|
<data name="NoFavorites" xml:space="preserve">
|
||||||
<value>तिजोरी में कोई अभिमत आइटम नहीं है।</value>
|
<value>तिजोरी में कोई मनपसंद चीज़ नहीं है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoItems" xml:space="preserve">
|
<data name="NoItems" xml:space="preserve">
|
||||||
<value>तिजोरी में कोई आइटम नहीं है।</value>
|
<value>तिजोरी में कोई चीज़ नहीं है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoItemsTap" xml:space="preserve">
|
<data name="NoItemsTap" xml:space="preserve">
|
||||||
<value>There are no items in your vault for this website. Tap to add one.</value>
|
<value>इस वेबसाइट/ऐप के लिए तिजोरी में कोई चीज़ नहीं है। चीज़ जोड़ने के लिए दबाएं।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
|
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
|
||||||
<value>इस आइटम में कोई यूजरनेम या पासवर्ड नहीं पड़ा है।</value>
|
<value>इस लॉगइन में कोई यूजरनाम या पासवर्ड नहीं है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OkGotIt" xml:space="preserve">
|
<data name="OkGotIt" xml:space="preserve">
|
||||||
<value>ठीक है, समझ गए!</value>
|
<value>ठीक है, समझ गए!</value>
|
||||||
<comment>Confirmation, like "Ok, I understand it"</comment>
|
<comment>Confirmation, like "Ok, I understand it"</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="OptionDefaults" xml:space="preserve">
|
<data name="OptionDefaults" xml:space="preserve">
|
||||||
<value>Option defaults are set from the main bitwarden app's password generator tool.</value>
|
<value>विकल्प डिफॉल्ट मुख्य बिटवार्डन ऐप के पासवर्ड जनरेटर औज़ार से सेट होता है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Options" xml:space="preserve">
|
<data name="Options" xml:space="preserve">
|
||||||
<value>विकल्प</value>
|
<value>विकल्प</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Other" xml:space="preserve">
|
<data name="Other" xml:space="preserve">
|
||||||
<value>अन्य</value>
|
<value>दूसरे</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordGenerated" xml:space="preserve">
|
<data name="PasswordGenerated" xml:space="preserve">
|
||||||
<value>पासवर्ड बनाया गया</value>
|
<value>पासवर्ड बनाया गया</value>
|
||||||
@@ -639,13 +638,13 @@
|
|||||||
<value>पासवर्ड जनरेटर</value>
|
<value>पासवर्ड जनरेटर</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordHint" xml:space="preserve">
|
<data name="PasswordHint" xml:space="preserve">
|
||||||
<value>पासवर्ड संकेत</value>
|
<value>पासवर्ड इशारा</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordHintAlert" xml:space="preserve">
|
<data name="PasswordHintAlert" xml:space="preserve">
|
||||||
<value>हमने आपको मास्टर पासवर्ड संकेत के साथ एक ईमेल भेजा है।</value>
|
<value>हमने आपको मुख्य पासवर्ड इशारा एक ईमेल के साथ भेजा है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordOverrideAlert" xml:space="preserve">
|
<data name="PasswordOverrideAlert" xml:space="preserve">
|
||||||
<value>आप पुराने पासवर्ड के ऊपर दूसरा पासवर्ड लिखने के लिए आश्वस्त हैं?</value>
|
<value>चालू पासवर्ड पक्का ओवरराइट करें?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PushNotificationAlert" xml:space="preserve">
|
<data name="PushNotificationAlert" xml:space="preserve">
|
||||||
<value>bitwarden keeps your vault automatically synced by using push notifications. For the best possible experience, please select "Ok" on the following prompt when asked to enable push notifications.</value>
|
<value>bitwarden keeps your vault automatically synced by using push notifications. For the best possible experience, please select "Ok" on the following prompt when asked to enable push notifications.</value>
|
||||||
@@ -809,7 +808,7 @@
|
|||||||
<value>You are searching for an auto-fill login for "{0}".</value>
|
<value>You are searching for an auto-fill login for "{0}".</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnOrg" xml:space="preserve">
|
<data name="LearnOrg" xml:space="preserve">
|
||||||
<value>Learn about organizations</value>
|
<value>संगठन के बारे में जानें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CannotOpenApp" xml:space="preserve">
|
<data name="CannotOpenApp" xml:space="preserve">
|
||||||
<value>"{0}" ऐप नहीं खोल सकता।</value>
|
<value>"{0}" ऐप नहीं खोल सकता।</value>
|
||||||
@@ -850,7 +849,7 @@
|
|||||||
<value>दो-चरण लॉगिन विकल्प</value>
|
<value>दो-चरण लॉगिन विकल्प</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseAnotherTwoStepMethod" xml:space="preserve">
|
<data name="UseAnotherTwoStepMethod" xml:space="preserve">
|
||||||
<value>Use another two-step login method</value>
|
<value>कोई दूसरा दो-कदम लॉगइन तरीका इस्तेमाल करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationEmailNotSent" xml:space="preserve">
|
<data name="VerificationEmailNotSent" xml:space="preserve">
|
||||||
<value>Could not send verification email. Try again.</value>
|
<value>Could not send verification email. Try again.</value>
|
||||||
@@ -1211,7 +1210,7 @@ Scanning will happen automatically.</value>
|
|||||||
<value>छुपा हुआ</value>
|
<value>छुपा हुआ</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FieldTypeLinked" xml:space="preserve">
|
<data name="FieldTypeLinked" xml:space="preserve">
|
||||||
<value>Linked</value>
|
<value>जुड़ा हुआ</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FieldTypeText" xml:space="preserve">
|
<data name="FieldTypeText" xml:space="preserve">
|
||||||
<value>वाक्य</value>
|
<value>वाक्य</value>
|
||||||
@@ -1286,7 +1285,7 @@ Scanning will happen automatically.</value>
|
|||||||
<comment>ex. Date this password was updated</comment>
|
<comment>ex. Date this password was updated</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="DateUpdated" xml:space="preserve">
|
<data name="DateUpdated" xml:space="preserve">
|
||||||
<value>Updated</value>
|
<value>अपडेट किया गया</value>
|
||||||
<comment>ex. Date this item was updated</comment>
|
<comment>ex. Date this item was updated</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillActivated" xml:space="preserve">
|
<data name="AutofillActivated" xml:space="preserve">
|
||||||
@@ -1576,7 +1575,7 @@ Scanning will happen automatically.</value>
|
|||||||
<comment>The color black</comment>
|
<comment>The color black</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Nord" xml:space="preserve">
|
<data name="Nord" xml:space="preserve">
|
||||||
<value>Nord</value>
|
<value>नॉर्ड</value>
|
||||||
<comment>'Nord' is the name of a specific color scheme. It should not be translated.</comment>
|
<comment>'Nord' is the name of a specific color scheme. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="SolarizedDark" xml:space="preserve">
|
<data name="SolarizedDark" xml:space="preserve">
|
||||||
@@ -1872,7 +1871,7 @@ Scanning will happen automatically.</value>
|
|||||||
<value>An organization policy is affecting your ownership options.</value>
|
<value>An organization policy is affecting your ownership options.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Send" xml:space="preserve">
|
<data name="Send" xml:space="preserve">
|
||||||
<value>Send</value>
|
<value>सेंड</value>
|
||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="AllSends" xml:space="preserve">
|
<data name="AllSends" xml:space="preserve">
|
||||||
@@ -1880,7 +1879,7 @@ Scanning will happen automatically.</value>
|
|||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Sends" xml:space="preserve">
|
<data name="Sends" xml:space="preserve">
|
||||||
<value>Sends</value>
|
<value>सेंड्स</value>
|
||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="NameInfo" xml:space="preserve">
|
<data name="NameInfo" xml:space="preserve">
|
||||||
@@ -1888,10 +1887,10 @@ Scanning will happen automatically.</value>
|
|||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Text" xml:space="preserve">
|
<data name="Text" xml:space="preserve">
|
||||||
<value>Text</value>
|
<value>टेक्सट</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TypeText" xml:space="preserve">
|
<data name="TypeText" xml:space="preserve">
|
||||||
<value>Text</value>
|
<value>टेक्सट</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TypeTextInfo" xml:space="preserve">
|
<data name="TypeTextInfo" xml:space="preserve">
|
||||||
<value>The text you want to send.</value>
|
<value>The text you want to send.</value>
|
||||||
@@ -1901,7 +1900,7 @@ Scanning will happen automatically.</value>
|
|||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="TypeFile" xml:space="preserve">
|
<data name="TypeFile" xml:space="preserve">
|
||||||
<value>File</value>
|
<value>फाइल</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TypeFileInfo" xml:space="preserve">
|
<data name="TypeFileInfo" xml:space="preserve">
|
||||||
<value>The file you want to send.</value>
|
<value>The file you want to send.</value>
|
||||||
@@ -2031,22 +2030,22 @@ Scanning will happen automatically.</value>
|
|||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="OneDay" xml:space="preserve">
|
<data name="OneDay" xml:space="preserve">
|
||||||
<value>1 day</value>
|
<value>1 दिन</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TwoDays" xml:space="preserve">
|
<data name="TwoDays" xml:space="preserve">
|
||||||
<value>2 days</value>
|
<value>2 दिन</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThreeDays" xml:space="preserve">
|
<data name="ThreeDays" xml:space="preserve">
|
||||||
<value>3 days</value>
|
<value>3 दिन</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SevenDays" xml:space="preserve">
|
<data name="SevenDays" xml:space="preserve">
|
||||||
<value>7 days</value>
|
<value>7 दिन</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThirtyDays" xml:space="preserve">
|
<data name="ThirtyDays" xml:space="preserve">
|
||||||
<value>30 days</value>
|
<value>30 दिन</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Custom" xml:space="preserve">
|
<data name="Custom" xml:space="preserve">
|
||||||
<value>Custom</value>
|
<value>कस्टम</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ShareOnSave" xml:space="preserve">
|
<data name="ShareOnSave" xml:space="preserve">
|
||||||
<value>Share this Send upon save</value>
|
<value>Share this Send upon save</value>
|
||||||
@@ -2163,7 +2162,7 @@ Scanning will happen automatically.</value>
|
|||||||
<value>Unlocked</value>
|
<value>Unlocked</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountLocked" xml:space="preserve">
|
<data name="AccountLocked" xml:space="preserve">
|
||||||
<value>Locked</value>
|
<value>बंद</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountLoggedOut" xml:space="preserve">
|
<data name="AccountLoggedOut" xml:space="preserve">
|
||||||
<value>Logged out</value>
|
<value>Logged out</value>
|
||||||
@@ -2205,7 +2204,7 @@ Scanning will happen automatically.</value>
|
|||||||
<value>Send code</value>
|
<value>Send code</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Sending" xml:space="preserve">
|
<data name="Sending" xml:space="preserve">
|
||||||
<value>Sending</value>
|
<value>भेज रहे</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopySendLinkOnSave" xml:space="preserve">
|
<data name="CopySendLinkOnSave" xml:space="preserve">
|
||||||
<value>Copy Send link on save</value>
|
<value>Copy Send link on save</value>
|
||||||
@@ -2268,7 +2267,7 @@ Scanning will happen automatically.</value>
|
|||||||
<value>All vaults</value>
|
<value>All vaults</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Vaults" xml:space="preserve">
|
<data name="Vaults" xml:space="preserve">
|
||||||
<value>Vaults</value>
|
<value>तिजोरी</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultFilterDescription" xml:space="preserve">
|
<data name="VaultFilterDescription" xml:space="preserve">
|
||||||
<value>Vault: {0}</value>
|
<value>Vault: {0}</value>
|
||||||
@@ -2277,7 +2276,7 @@ Scanning will happen automatically.</value>
|
|||||||
<value>सब</value>
|
<value>सब</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Totp" xml:space="preserve">
|
<data name="Totp" xml:space="preserve">
|
||||||
<value>TOTP</value>
|
<value>टीओटीपी</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationCodes" xml:space="preserve">
|
<data name="VerificationCodes" xml:space="preserve">
|
||||||
<value>Verification codes</value>
|
<value>Verification codes</value>
|
||||||
@@ -2341,10 +2340,10 @@ select Add TOTP to store the key safely</value>
|
|||||||
<value>IP address</value>
|
<value>IP address</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Time" xml:space="preserve">
|
<data name="Time" xml:space="preserve">
|
||||||
<value>Time</value>
|
<value>समय</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Near" xml:space="preserve">
|
<data name="Near" xml:space="preserve">
|
||||||
<value>Near</value>
|
<value>पास</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ConfirmLogIn" xml:space="preserve">
|
<data name="ConfirmLogIn" xml:space="preserve">
|
||||||
<value>Confirm login</value>
|
<value>Confirm login</value>
|
||||||
@@ -2368,120 +2367,120 @@ select Add TOTP to store the key safely</value>
|
|||||||
<value>लॉगइन मांग माने</value>
|
<value>लॉगइन मांग माने</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseThisDeviceToApproveLoginRequestsMadeFromOtherDevices" xml:space="preserve">
|
<data name="UseThisDeviceToApproveLoginRequestsMadeFromOtherDevices" xml:space="preserve">
|
||||||
<value>Use this device to approve login requests made from other devices.</value>
|
<value>इस डिवाइस का इस्तेमाल दूसरे डिवाइस के लॉगइन मांगे मानने के लिए करें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AllowNotifications" xml:space="preserve">
|
<data name="AllowNotifications" xml:space="preserve">
|
||||||
<value>सूचना देने दें</value>
|
<value>सूचना देने दें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ReceivePushNotificationsForNewLoginRequests" xml:space="preserve">
|
<data name="ReceivePushNotificationsForNewLoginRequests" xml:space="preserve">
|
||||||
<value>Receive push notifications for new login requests</value>
|
<value>नए लॉगइन मांग के लिए पुश सूचना लें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoThanks" xml:space="preserve">
|
<data name="NoThanks" xml:space="preserve">
|
||||||
<value>No thanks</value>
|
<value>ना, शुक्रिया</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ConfimLogInAttempForX" xml:space="preserve">
|
<data name="ConfimLogInAttempForX" xml:space="preserve">
|
||||||
<value>Confirm login attempt for {0}</value>
|
<value>{0} के लिए लॉगइन कोशिश पक्का करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AllNotifications" xml:space="preserve">
|
<data name="AllNotifications" xml:space="preserve">
|
||||||
<value>All notifications</value>
|
<value>सारे सूचनाएं</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordType" xml:space="preserve">
|
<data name="PasswordType" xml:space="preserve">
|
||||||
<value>Password type</value>
|
<value>पासवर्ड प्रकार</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WhatWouldYouLikeToGenerate" xml:space="preserve">
|
<data name="WhatWouldYouLikeToGenerate" xml:space="preserve">
|
||||||
<value>What would you like to generate?</value>
|
<value>क्या बनाएं?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UsernameType" xml:space="preserve">
|
<data name="UsernameType" xml:space="preserve">
|
||||||
<value>Username type</value>
|
<value>यूज़रनाम प्रकार</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PlusAddressedEmail" xml:space="preserve">
|
<data name="PlusAddressedEmail" xml:space="preserve">
|
||||||
<value>Plus addressed email</value>
|
<value>प्लस पता किया गया ईमेल</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CatchAllEmail" xml:space="preserve">
|
<data name="CatchAllEmail" xml:space="preserve">
|
||||||
<value>Catch-all email</value>
|
<value>सब-पकड़ें ईमेल</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ForwardedEmailAlias" xml:space="preserve">
|
<data name="ForwardedEmailAlias" xml:space="preserve">
|
||||||
<value>Forwarded email alias</value>
|
<value>ईमेल नकलीनाम फॉरवर्ड किया गया</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RandomWord" xml:space="preserve">
|
<data name="RandomWord" xml:space="preserve">
|
||||||
<value>Random word</value>
|
<value>बेतरतीब शब्द</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EmailRequiredParenthesis" xml:space="preserve">
|
<data name="EmailRequiredParenthesis" xml:space="preserve">
|
||||||
<value>Email (required)</value>
|
<value>ईमेल (ज़रूरी)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DomainNameRequiredParenthesis" xml:space="preserve">
|
<data name="DomainNameRequiredParenthesis" xml:space="preserve">
|
||||||
<value>Domain name (required)</value>
|
<value>डोमेन नाम (ज़रूरी)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="APIKeyRequiredParenthesis" xml:space="preserve">
|
<data name="APIKeyRequiredParenthesis" xml:space="preserve">
|
||||||
<value>API key (required)</value>
|
<value>एपीआई चाबी (ज़रूरी)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Service" xml:space="preserve">
|
<data name="Service" xml:space="preserve">
|
||||||
<value>Service</value>
|
<value>सेवा</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AnonAddy" xml:space="preserve">
|
<data name="AnonAddy" xml:space="preserve">
|
||||||
<value>AnonAddy</value>
|
<value>एननऐडी</value>
|
||||||
<comment>"AnonAddy" is the product name and should not be translated.</comment>
|
<comment>"AnonAddy" is the product name and should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="FirefoxRelay" xml:space="preserve">
|
<data name="FirefoxRelay" xml:space="preserve">
|
||||||
<value>Firefox Relay</value>
|
<value>फायरफॉक्स रीले</value>
|
||||||
<comment>"Firefox Relay" is the product name and should not be translated.</comment>
|
<comment>"Firefox Relay" is the product name and should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="SimpleLogin" xml:space="preserve">
|
<data name="SimpleLogin" xml:space="preserve">
|
||||||
<value>SimpleLogin</value>
|
<value>सिंपललॉगइन</value>
|
||||||
<comment>"SimpleLogin" is the product name and should not be translated.</comment>
|
<comment>"SimpleLogin" is the product name and should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="DuckDuckGo" xml:space="preserve">
|
<data name="DuckDuckGo" xml:space="preserve">
|
||||||
<value>DuckDuckGo</value>
|
<value>डकडकगो</value>
|
||||||
<comment>"DuckDuckGo" is the product name and should not be translated.</comment>
|
<comment>"DuckDuckGo" is the product name and should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Fastmail" xml:space="preserve">
|
<data name="Fastmail" xml:space="preserve">
|
||||||
<value>Fastmail</value>
|
<value>फास्टमेल</value>
|
||||||
<comment>"Fastmail" is the product name and should not be translated.</comment>
|
<comment>"Fastmail" is the product name and should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="APIAccessToken" xml:space="preserve">
|
<data name="APIAccessToken" xml:space="preserve">
|
||||||
<value>API access token</value>
|
<value>एपीआई एक्सेस टोकन</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AreYouSureYouWantToOverwriteTheCurrentUsername" xml:space="preserve">
|
<data name="AreYouSureYouWantToOverwriteTheCurrentUsername" xml:space="preserve">
|
||||||
<value>Are you sure you want to overwrite the current username?</value>
|
<value>चालू यूज़रनाम को पक्का ओवरराइट करें?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GenerateUsername" xml:space="preserve">
|
<data name="GenerateUsername" xml:space="preserve">
|
||||||
<value>Generate username</value>
|
<value>यूज़रनाम बनाएं</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EmailType" xml:space="preserve">
|
<data name="EmailType" xml:space="preserve">
|
||||||
<value>Email Type</value>
|
<value>ईमेल टाइप</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WebsiteRequired" xml:space="preserve">
|
<data name="WebsiteRequired" xml:space="preserve">
|
||||||
<value>Website (required)</value>
|
<value>वेबसाइट (ज़रूरी)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnknownXErrorMessage" xml:space="preserve">
|
<data name="UnknownXErrorMessage" xml:space="preserve">
|
||||||
<value>Unknown {0} error occurred.</value>
|
<value>अनजान {0} गड़बड़ हुई।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PlusAddressedEmailDescription" xml:space="preserve">
|
<data name="PlusAddressedEmailDescription" xml:space="preserve">
|
||||||
<value>Use your email provider's subaddress capabilities</value>
|
<value>अपने ईमेल प्रदाता की उपपता ताकत इस्तेमाल करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CatchAllEmailDescription" xml:space="preserve">
|
<data name="CatchAllEmailDescription" xml:space="preserve">
|
||||||
<value>Use your domain's configured catch-all inbox.</value>
|
<value>अपने डोमेन का सब-पकड़ें इनबॉक्स इस्तेमाल करें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ForwardedEmailDescription" xml:space="preserve">
|
<data name="ForwardedEmailDescription" xml:space="preserve">
|
||||||
<value>Generate an email alias with an external forwarding service.</value>
|
<value>बाहरी फॉरवर्ड सेवा से ईमेल नकलीनाम बनाएं।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Random" xml:space="preserve">
|
<data name="Random" xml:space="preserve">
|
||||||
<value>Random</value>
|
<value>बेतरतीब</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ConnectToWatch" xml:space="preserve">
|
<data name="ConnectToWatch" xml:space="preserve">
|
||||||
<value>Connect to Watch</value>
|
<value>घड़ी से जुड़े</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityServiceDisclosure" xml:space="preserve">
|
<data name="AccessibilityServiceDisclosure" xml:space="preserve">
|
||||||
<value>Accessibility Service Disclosure</value>
|
<value>सुलभता सेवा प्रकटीकरण</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDisclosureText" xml:space="preserve">
|
<data name="AccessibilityDisclosureText" xml:space="preserve">
|
||||||
<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>
|
<value>Bitwarden uses the Accessibility Service to search for login fields in apps and websites, then establish the appropriate field IDs for entering a username & password when a match for the app or site is found. We do not store any of the information presented to us by the service, nor do we make any attempt to control any on-screen elements beyond text entry of credentials.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Accept" xml:space="preserve">
|
<data name="Accept" xml:space="preserve">
|
||||||
<value>Accept</value>
|
<value>मानें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Decline" xml:space="preserve">
|
<data name="Decline" xml:space="preserve">
|
||||||
<value>Decline</value>
|
<value>नकारें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoginRequestHasAlreadyExpired" xml:space="preserve">
|
<data name="LoginRequestHasAlreadyExpired" xml:space="preserve">
|
||||||
<value>Login request has already expired.</value>
|
<value>Login request has already expired.</value>
|
||||||
@@ -2497,8 +2496,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Get master password hint</value>
|
<value>Get master password hint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Not you?</value>
|
<value>Not you?</value>
|
||||||
@@ -2534,7 +2533,7 @@ Do you want to switch to this account?</value>
|
|||||||
<value>लंबित लॉगइन मांगे</value>
|
<value>लंबित लॉगइन मांगे</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DeclineAllRequests" xml:space="preserve">
|
<data name="DeclineAllRequests" xml:space="preserve">
|
||||||
<value>सारे मांग नकारे</value>
|
<value>सारे मांग नकारें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AreYouSureYouWantToDeclineAllPendingLogInRequests" xml:space="preserve">
|
<data name="AreYouSureYouWantToDeclineAllPendingLogInRequests" xml:space="preserve">
|
||||||
<value>सारे लंबित लॉगइन मांग पक्का नकारें?</value>
|
<value>सारे लंबित लॉगइन मांग पक्का नकारें?</value>
|
||||||
@@ -2564,7 +2563,7 @@ Do you want to switch to this account?</value>
|
|||||||
<value>ज़रूरी</value>
|
<value>ज़रूरी</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourMasterPasswordCannotBeRecoveredIfYouForgetItXCharactersMinimum" xml:space="preserve">
|
<data name="YourMasterPasswordCannotBeRecoveredIfYouForgetItXCharactersMinimum" xml:space="preserve">
|
||||||
<value>आप अपना मुख्य पासवर्ड भूलने के बाद वापस नहीं ले सकते। {0} अक्षर कम-से-कम।</value>
|
<value>मुख्य पासवर्ड भूलने के बाद रिकवर नहीं कर सकते। {0} अक्षर कम-से-कम।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WeakMasterPassword" xml:space="preserve">
|
<data name="WeakMasterPassword" xml:space="preserve">
|
||||||
<value>कमज़ोर मुख्य पासवर्ड</value>
|
<value>कमज़ोर मुख्य पासवर्ड</value>
|
||||||
@@ -2611,10 +2610,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>कोई भी चीज़ खोज शब्द से मेल नहीं खाता</value>
|
<value>कोई भी चीज़ खोज शब्द से मेल नहीं खाता</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>अमेरिकी संयुक्त राज्य</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>यूरोपीय संघ</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>खुद-होस्ट</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>डाटा इलाका</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>इलाका</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>आपका मुख्य पासवर्ड आपके संगठन के एक या उससे ज़्यादा नीति को नहीं मानता। तिजोरी एक्सेस करने के लिए आपको अपना मुख्य पासवर्ड अभी बदलना होगा। ये करने से आप अपने चालू सत्र से लॉग आउट हो जाएंगे, जिसके वजह से आपको वापस लॉग इन करना पड़ेगा। दूसरे डिवाइसों पर चालू सत्र एक घंटे तक सक्रिय रह सकते हैं।</value>
|
<value>आपका मुख्य पासवर्ड आपके संगठन के एक या उससे ज़्यादा नीति को नहीं मानता। तिजोरी एक्सेस करने के लिए आपको अपना मुख्य पासवर्ड अभी बदलना होगा। ये करने से आप अपने चालू सत्र से लॉग आउट हो जाएंगे, जिसके वजह से आपको वापस लॉग इन करना पड़ेगा। दूसरे डिवाइसों पर चालू सत्र एक घंटे तक सक्रिय रह सकते हैं।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>चालू मुख्य पासवर्ड</value>
|
<value>चालू मुख्य पासवर्ड</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2493,8 +2493,8 @@
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Slanje podsjetnika glavne lozinke</value>
|
<value>Slanje podsjetnika glavne lozinke</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Prijava kao {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Nisi ti?</value>
|
<value>Nisi ti?</value>
|
||||||
@@ -2607,10 +2607,37 @@
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Nema stavki koje odgovaraju pretrazi</value>
|
<value>Nema stavki koje odgovaraju pretrazi</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2494,8 +2494,8 @@ Szeretnénk átváltani erre a fiókra?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Mesterjelszó emlékeztető kérése</value>
|
<value>Mesterjelszó emlékeztető kérése</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Bejelentkezve mint {0}</value>
|
<value>Bejelentkezve mint {0} :: {1}.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Ez tévedés?</value>
|
<value>Ez tévedés?</value>
|
||||||
@@ -2608,10 +2608,37 @@ Szeretnénk átváltani erre a fiókra?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Nincsenek a keresésnek megfelelő elemek.</value>
|
<value>Nincsenek a keresésnek megfelelő elemek.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Saját kiszolgáló</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Adatrégió</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Régió</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>A mesterjelszó nem felel meg egy vagy több szervezeti szabályzatnak. A széf eléréséhez frissíteni kell a meszerjelszót. A továbblépés kijelentkeztet az aktuális munkamenetből és újra be kell jelentkezni. A többi eszközön lévő aktív munkamenetek akár egy óráig is aktívak maradhatnak.</value>
|
<value>A mesterjelszó nem felel meg egy vagy több szervezeti szabályzatnak. A széf eléréséhez frissíteni kell a meszerjelszót. A továbblépés kijelentkeztet az aktuális munkamenetből és újra be kell jelentkezni. A többi eszközön lévő aktív munkamenetek akár egy óráig is aktívak maradhatnak.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Jelenlegi mesterjelszó</value>
|
<value>Jelenlegi mesterjelszó</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Mesterjelszó újbóli bekérés súgó</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>A feloldás meghiúsulhat, mert nincs elegendő memória. A megoldáshoz csökkentsül a KDF memóriabeállításait.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Érvénytelen API kulcs</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Érvénytelen API vezérjel</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2495,8 +2495,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Get master password hint</value>
|
<value>Get master password hint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Not you?</value>
|
<value>Not you?</value>
|
||||||
@@ -2609,10 +2609,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>There are no items that match the search</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2495,8 +2495,8 @@ Vuoi passare a questo account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Ottieni suggerimento per la password principale</value>
|
<value>Ottieni suggerimento per la password principale</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Accedendo come</value>
|
<value>Accedendo come {0} su {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Non sei tu?</value>
|
<value>Non sei tu?</value>
|
||||||
@@ -2609,10 +2609,37 @@ Vuoi passare a questo account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Nessun elemento corrisponde alla ricerca</value>
|
<value>Nessun elemento corrisponde alla ricerca</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Area dati</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Regione</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>La tua password principale non soddisfa uno o più politiche della tua organizzazione. Per accedere alla cassaforte, aggiornala ora. Procedere ti farà uscire dalla sessione corrente, richiedendoti di accedere di nuovo. Le sessioni attive su altri dispositivi potrebbero continuare a rimanere attive per un massimo di un'ora.</value>
|
<value>La tua password principale non soddisfa uno o più politiche della tua organizzazione. Per accedere alla cassaforte, aggiornala ora. Procedere ti farà uscire dalla sessione corrente, richiedendoti di accedere di nuovo. Le sessioni attive su altri dispositivi potrebbero continuare a rimanere attive per un massimo di un'ora.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Password principale corrente</value>
|
<value>Password principale corrente</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Aiuto per chiedere la password principale di nuovo</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Lo sblocco potrebbe fallire a causa di memoria insufficiente. Riduci le impostazioni della memoria KDF per risolvere il problema</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Chiave API non valida</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Token API non valido</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2495,8 +2495,8 @@
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>マスターパスワードのヒントを取得する</value>
|
<value>マスターパスワードのヒントを取得する</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>{0} としてログイン</value>
|
<value>{1} で {0} としてログイン</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>あなたではないですか?</value>
|
<value>あなたではないですか?</value>
|
||||||
@@ -2609,10 +2609,37 @@
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>検索に一致するアイテムはありません</value>
|
<value>検索に一致するアイテムはありません</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>米国</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>自己ホスト型</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>データのリージョン</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>リージョン</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>マスターパスワードが組織のポリシーに適合していません。保管庫にアクセスするには、今すぐマスターパスワードを更新しなければなりません。続行すると現在のセッションからログアウトし、再度ログインする必要があります。 他のデバイス上のアクティブなセッションは、最大1時間アクティブであり続けることがあります。</value>
|
<value>マスターパスワードが組織のポリシーに適合していません。保管庫にアクセスするには、今すぐマスターパスワードを更新しなければなりません。続行すると現在のセッションからログアウトし、再度ログインする必要があります。 他のデバイス上のアクティブなセッションは、最大1時間アクティブであり続けることがあります。</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>現在のマスターパスワード</value>
|
<value>現在のマスターパスワード</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>マスターパスワードの再プロンプトヘルプ</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>メモリ不足のためロック解除に失敗することがあります。KDF のメモリ設定を減らして解決してください</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>無効な API キー</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>無効な API トークン</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2496,8 +2496,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Get master password hint</value>
|
<value>Get master password hint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Not you?</value>
|
<value>Not you?</value>
|
||||||
@@ -2610,10 +2610,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>There are no items that match the search</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2496,8 +2496,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Get master password hint</value>
|
<value>Get master password hint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Not you?</value>
|
<value>Not you?</value>
|
||||||
@@ -2610,10 +2610,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>There are no items that match the search</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2495,8 +2495,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>마스터 비밀번호 힌트 얻기</value>
|
<value>마스터 비밀번호 힌트 얻기</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>{0}(으)로 로그인 중</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>본인이 아닌가요?</value>
|
<value>본인이 아닌가요?</value>
|
||||||
@@ -2609,10 +2609,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>검색어와 일치하는 항목이 없습니다</value>
|
<value>검색어와 일치하는 항목이 없습니다</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2496,8 +2496,8 @@ Ar norite pereiti prie šios paskyros?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Gauti pagrindinio slaptažodžio užuominą</value>
|
<value>Gauti pagrindinio slaptažodžio užuominą</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Prisijungiama kaip {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Ne jūs?</value>
|
<value>Ne jūs?</value>
|
||||||
@@ -2610,10 +2610,37 @@ Ar norite pereiti prie šios paskyros?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Elementų, atitinkančių paiešką, nėra</value>
|
<value>Elementų, atitinkančių paiešką, nėra</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Jūsų pagrindinis slaptažodis neatitinka vieno ar kelių organizacijos slaptažodžiui keliamų reikalavimų. Norėdami prisijungti prie saugyklos, jūs turite atnaujinti savo pagrindinį slaptažodį. Jeigu nuspręsite tęsti, jūs būsite atjungti nuo dabartinės sesijos ir jums reikės vėl prisijungti. Visos aktyvios sesijos kituose įrenginiuose gali išlikti aktyvios iki vienos valandos.</value>
|
<value>Jūsų pagrindinis slaptažodis neatitinka vieno ar kelių organizacijos slaptažodžiui keliamų reikalavimų. Norėdami prisijungti prie saugyklos, jūs turite atnaujinti savo pagrindinį slaptažodį. Jeigu nuspręsite tęsti, jūs būsite atjungti nuo dabartinės sesijos ir jums reikės vėl prisijungti. Visos aktyvios sesijos kituose įrenginiuose gali išlikti aktyvios iki vienos valandos.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Dabartinis pagrindinis slaptažodis</value>
|
<value>Dabartinis pagrindinis slaptažodis</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2495,8 +2495,8 @@ Vai pārslēgties uz šo kontu?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Saņemt galvenās paroles norādi</value>
|
<value>Saņemt galvenās paroles norādi</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Piesakās kā {0}</value>
|
<value>Piesakās {1} kā {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Tas neesi Tu?</value>
|
<value>Tas neesi Tu?</value>
|
||||||
@@ -2609,10 +2609,37 @@ Vai pārslēgties uz šo kontu?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Nav vienumu, kas atbilstu meklējumam</value>
|
<value>Nav vienumu, kas atbilstu meklējumam</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>ASV</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>ES</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Pašizvietots</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Datu apgabals</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Apgabals</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Galvenā parole neatbilst vienam vai vairākiem apvienības nosacījumiem. Ir jāatjaunina galvenā parole, lai varētu piekļūt glabātavai. Turpinot notiks atteikšanās no pašreizējās sesijas, un būs nepieciešams pieteikties no jauna. Citās ierīcēs esošās sesijas var turpināt darboties līdz vienai stundai.</value>
|
<value>Galvenā parole neatbilst vienam vai vairākiem apvienības nosacījumiem. Ir jāatjaunina galvenā parole, lai varētu piekļūt glabātavai. Turpinot notiks atteikšanās no pašreizējās sesijas, un būs nepieciešams pieteikties no jauna. Citās ierīcēs esošās sesijas var turpināt darboties līdz vienai stundai.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Pašreizējā galvenā parole</value>
|
<value>Pašreizējā galvenā parole</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Galvenās paroles pārvaicāšanas palīdzība</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Atslēgšana var neizdoties nepietiekamas atmiņas dēļ. Lai to novērstu, jāsamazina KDF atmiņas iestatījmi</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Nederīga API atslēga</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Nederīga API pilnvara</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -276,7 +276,7 @@
|
|||||||
<value>നിങ്ങൾക്ക് ലോഗ് ഔട്ട് ചെയ്യണമെന്ന് ഉറപ്പാണോ?</value>
|
<value>നിങ്ങൾക്ക് ലോഗ് ഔട്ട് ചെയ്യണമെന്ന് ഉറപ്പാണോ?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RemoveAccount" xml:space="preserve">
|
<data name="RemoveAccount" xml:space="preserve">
|
||||||
<value>Remove account</value>
|
<value>അക്കൗണ്ട് നീക്കംചെയ്യുക</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RemoveAccountConfirmation" xml:space="preserve">
|
<data name="RemoveAccountConfirmation" xml:space="preserve">
|
||||||
<value>Are you sure you want to remove this account?</value>
|
<value>Are you sure you want to remove this account?</value>
|
||||||
@@ -584,7 +584,7 @@
|
|||||||
<value>നിങ്ങളുടെ പാസ്വേഡ് മറന്നാൽ അത് ഓർമ്മിക്കാൻ ഒരു പ്രാഥമിക പാസ്വേഡ് സൂചന സഹായിക്കും.</value>
|
<value>നിങ്ങളുടെ പാസ്വേഡ് മറന്നാൽ അത് ഓർമ്മിക്കാൻ ഒരു പ്രാഥമിക പാസ്വേഡ് സൂചന സഹായിക്കും.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
|
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
|
||||||
<value>Master password must be at least {0} characters long.</value>
|
<value>പ്രാഥമിക പാസ്വേഡിന് കുറഞ്ഞത് {0} പ്രതീകങ്ങളെങ്കിലും ദൈർഘ്യമുണ്ടായിരിക്കണം.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MinNumbers" xml:space="preserve">
|
<data name="MinNumbers" xml:space="preserve">
|
||||||
<value>കുറഞ്ഞ സംഖ്യകൾ</value>
|
<value>കുറഞ്ഞ സംഖ്യകൾ</value>
|
||||||
@@ -775,10 +775,10 @@
|
|||||||
<value>പ്രവർത്തനക്ഷമമാക്കി</value>
|
<value>പ്രവർത്തനക്ഷമമാക്കി</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Off" xml:space="preserve">
|
<data name="Off" xml:space="preserve">
|
||||||
<value>Off</value>
|
<value>ഓഫ്</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="On" xml:space="preserve">
|
<data name="On" xml:space="preserve">
|
||||||
<value>On</value>
|
<value>ഓൺ</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Status" xml:space="preserve">
|
<data name="Status" xml:space="preserve">
|
||||||
<value>അവസ്ഥ</value>
|
<value>അവസ്ഥ</value>
|
||||||
@@ -900,8 +900,8 @@
|
|||||||
<value>ഓതന്റിക്കേറ്റർ കീ വായിക്കാൻ കഴിയുന്നില്ല.</value>
|
<value>ഓതന്റിക്കേറ്റർ കീ വായിക്കാൻ കഴിയുന്നില്ല.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PointYourCameraAtTheQRCode" xml:space="preserve">
|
<data name="PointYourCameraAtTheQRCode" xml:space="preserve">
|
||||||
<value>Point your camera at the QR Code.
|
<value>നിങ്ങളുടെ ക്യാമറ QR കോഡിലേക്ക് ചൂണ്ടുക.
|
||||||
Scanning will happen automatically.</value>
|
സ്കാനിംഗ് സ്വയമേവ നടക്കും.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ScanQrTitle" xml:space="preserve">
|
<data name="ScanQrTitle" xml:space="preserve">
|
||||||
<value>QR കോഡ് സ്കാൻ ചെയ്യുക</value>
|
<value>QR കോഡ് സ്കാൻ ചെയ്യുക</value>
|
||||||
@@ -1080,7 +1080,7 @@ Scanning will happen automatically.</value>
|
|||||||
<value>പേരിന്റെ അവസാന ഭാഗം</value>
|
<value>പേരിന്റെ അവസാന ഭാഗം</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FullName" xml:space="preserve">
|
<data name="FullName" xml:space="preserve">
|
||||||
<value>Full name</value>
|
<value>പൂര്ണ്ണമായ പേര്</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LicenseNumber" xml:space="preserve">
|
<data name="LicenseNumber" xml:space="preserve">
|
||||||
<value>ലൈസൻസ് നമ്പർ</value>
|
<value>ലൈസൻസ് നമ്പർ</value>
|
||||||
@@ -1210,7 +1210,7 @@ Scanning will happen automatically.</value>
|
|||||||
<value>മറച്ചത്</value>
|
<value>മറച്ചത്</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FieldTypeLinked" xml:space="preserve">
|
<data name="FieldTypeLinked" xml:space="preserve">
|
||||||
<value>Linked</value>
|
<value>ബന്ധിപ്പിച്ചത്</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FieldTypeText" xml:space="preserve">
|
<data name="FieldTypeText" xml:space="preserve">
|
||||||
<value>വാചകം</value>
|
<value>വാചകം</value>
|
||||||
@@ -1384,10 +1384,10 @@ Scanning will happen automatically.</value>
|
|||||||
<value>കളക്ഷനുകൾ തിരയുക</value>
|
<value>കളക്ഷനുകൾ തിരയുക</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchFileSends" xml:space="preserve">
|
<data name="SearchFileSends" xml:space="preserve">
|
||||||
<value>Search file Sends</value>
|
<value>അയച്ച വാക്കുകൾ തിരയുക</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchTextSends" xml:space="preserve">
|
<data name="SearchTextSends" xml:space="preserve">
|
||||||
<value>Search text Sends</value>
|
<value>അയച്ച വാക്കുകൾ തിരയുക</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchGroup" xml:space="preserve">
|
<data name="SearchGroup" xml:space="preserve">
|
||||||
<value>Search {0}</value>
|
<value>Search {0}</value>
|
||||||
@@ -1662,10 +1662,10 @@ Scanning will happen automatically.</value>
|
|||||||
<value>Send a verification code to your email</value>
|
<value>Send a verification code to your email</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CodeSent" xml:space="preserve">
|
<data name="CodeSent" xml:space="preserve">
|
||||||
<value>Code sent!</value>
|
<value>കോഡ് അയച്ചു!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ConfirmYourIdentity" xml:space="preserve">
|
<data name="ConfirmYourIdentity" xml:space="preserve">
|
||||||
<value>Confirm your identity to continue.</value>
|
<value>തുടരാൻ നിങ്ങളുടെ ഐഡന്റിറ്റി സ്ഥിരീകരിക്കുക.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVaultWarning" xml:space="preserve">
|
<data name="ExportVaultWarning" xml:space="preserve">
|
||||||
<value>ഈ എക്സ്പോർട്ടിൽ എൻക്രിപ്റ്റ് ചെയ്യാത്ത ഫോർമാറ്റിൽ നിങ്ങളുടെ വാൾട് ഡാറ്റ അടങ്ങിയിരിക്കുന്നു. എക്സ്പോർട് ചെയ്ത ഫയൽ സുരക്ഷിതമല്ലാത്ത ചാനലുകളിൽ (ഇമെയിൽ പോലുള്ളവ) നിങ്ങൾ സംഭരിക്കുകയോ അയയ്ക്കുകയോ ചെയ്യരുത്. നിങ്ങൾ ഇത് ഉപയോഗിച്ചുകഴിഞ്ഞാലുടൻ അത് മായ്ച്ചുകളയണം.</value>
|
<value>ഈ എക്സ്പോർട്ടിൽ എൻക്രിപ്റ്റ് ചെയ്യാത്ത ഫോർമാറ്റിൽ നിങ്ങളുടെ വാൾട് ഡാറ്റ അടങ്ങിയിരിക്കുന്നു. എക്സ്പോർട് ചെയ്ത ഫയൽ സുരക്ഷിതമല്ലാത്ത ചാനലുകളിൽ (ഇമെയിൽ പോലുള്ളവ) നിങ്ങൾ സംഭരിക്കുകയോ അയയ്ക്കുകയോ ചെയ്യരുത്. നിങ്ങൾ ഇത് ഉപയോഗിച്ചുകഴിഞ്ഞാലുടൻ അത് മായ്ച്ചുകളയണം.</value>
|
||||||
@@ -1886,7 +1886,7 @@ Scanning will happen automatically.</value>
|
|||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Text" xml:space="preserve">
|
<data name="Text" xml:space="preserve">
|
||||||
<value>Text</value>
|
<value>വാചകം</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TypeText" xml:space="preserve">
|
<data name="TypeText" xml:space="preserve">
|
||||||
<value>വാചകം</value>
|
<value>വാചകം</value>
|
||||||
@@ -1905,13 +1905,13 @@ Scanning will happen automatically.</value>
|
|||||||
<value>നിങ്ങൾ അയയ്ക്കാൻ ആഗ്രഹിക്കുന്ന ഫയൽ.</value>
|
<value>നിങ്ങൾ അയയ്ക്കാൻ ആഗ്രഹിക്കുന്ന ഫയൽ.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FileTypeIsSelected" xml:space="preserve">
|
<data name="FileTypeIsSelected" xml:space="preserve">
|
||||||
<value>File type is selected.</value>
|
<value>ഫയൽ തരം തിരഞ്ഞെടുത്തു.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FileTypeIsNotSelected" xml:space="preserve">
|
<data name="FileTypeIsNotSelected" xml:space="preserve">
|
||||||
<value>File type is not selected, tap to select.</value>
|
<value>ഫയൽ തരം തിരഞ്ഞെടുത്തിട്ടില്ല, തിരഞ്ഞെടുക്കാൻ ടാപ്പുചെയ്യുക.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TextTypeIsSelected" xml:space="preserve">
|
<data name="TextTypeIsSelected" xml:space="preserve">
|
||||||
<value>Text type is selected.</value>
|
<value>ഫയൽ തരം തിരഞ്ഞെടുത്തു.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TextTypeIsNotSelected" xml:space="preserve">
|
<data name="TextTypeIsNotSelected" xml:space="preserve">
|
||||||
<value>Text type is not selected, tap to select.</value>
|
<value>Text type is not selected, tap to select.</value>
|
||||||
@@ -1927,7 +1927,7 @@ Scanning will happen automatically.</value>
|
|||||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="PendingDelete" xml:space="preserve">
|
<data name="PendingDelete" xml:space="preserve">
|
||||||
<value>Pending deletion</value>
|
<value>പരിപൂർണ്ണമാവാത്ത ഇല്ലാതാക്കൽ</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExpirationDate" xml:space="preserve">
|
<data name="ExpirationDate" xml:space="preserve">
|
||||||
<value>കാലഹരണപ്പെടുന്ന തീയതി</value>
|
<value>കാലഹരണപ്പെടുന്ന തീയതി</value>
|
||||||
@@ -2495,8 +2495,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Get master password hint</value>
|
<value>Get master password hint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Not you?</value>
|
<value>Not you?</value>
|
||||||
@@ -2609,10 +2609,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>There are no items that match the search</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2496,8 +2496,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Get master password hint</value>
|
<value>Get master password hint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Not you?</value>
|
<value>Not you?</value>
|
||||||
@@ -2610,10 +2610,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>There are no items that match the search</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2496,8 +2496,8 @@ Vil du bytte til denne kontoen?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Få et hint om hovedpassordet</value>
|
<value>Få et hint om hovedpassordet</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logger inn som {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Ikke du?</value>
|
<value>Ikke du?</value>
|
||||||
@@ -2610,10 +2610,37 @@ Vil du bytte til denne kontoen?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>Det er ingen elementer som samsvarer med søket</value>
|
<value>Det er ingen elementer som samsvarer med søket</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Nåværende hovedpassord</value>
|
||||||
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2496,8 +2496,8 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
<data name="GetMasterPasswordwordHint" xml:space="preserve">
|
||||||
<value>Get master password hint</value>
|
<value>Get master password hint</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsXOnY" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Logging in as {0} on {1}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NotYou" xml:space="preserve">
|
<data name="NotYou" xml:space="preserve">
|
||||||
<value>Not you?</value>
|
<value>Not you?</value>
|
||||||
@@ -2610,10 +2610,37 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
|
||||||
<value>There are no items that match the search</value>
|
<value>There are no items that match the search</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="US" xml:space="preserve">
|
||||||
|
<value>US</value>
|
||||||
|
</data>
|
||||||
|
<data name="EU" xml:space="preserve">
|
||||||
|
<value>EU</value>
|
||||||
|
</data>
|
||||||
|
<data name="SelfHosted" xml:space="preserve">
|
||||||
|
<value>Self-hosted</value>
|
||||||
|
</data>
|
||||||
|
<data name="DataRegion" xml:space="preserve">
|
||||||
|
<value>Data region</value>
|
||||||
|
</data>
|
||||||
|
<data name="Region" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
<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>
|
||||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||||
<value>Current master password</value>
|
<value>Current master password</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
|
<value>Master password re-prompt help</value>
|
||||||
|
</data>
|
||||||
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
|
<value>Invalid API key</value>
|
||||||
|
</data>
|
||||||
|
<data name="InvalidAPIToken" xml:space="preserve">
|
||||||
|
<value>Invalid API token</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user