mirror of
https://github.com/bitwarden/mobile
synced 2025-12-17 16:53:26 +00:00
Merge branch 'master' into EC-295-swipe-to-copy-logins
This commit is contained in:
@@ -15,7 +15,7 @@ using Bit.Core.Utilities;
|
||||
|
||||
namespace Bit.Droid.Accessibility
|
||||
{
|
||||
[Service(Permission = Android.Manifest.Permission.BindAccessibilityService, Label = "Bitwarden")]
|
||||
[Service(Permission = Android.Manifest.Permission.BindAccessibilityService, Label = "Bitwarden", Exported = true)]
|
||||
[IntentFilter(new string[] { "android.accessibilityservice.AccessibilityService" })]
|
||||
[MetaData("android.accessibilityservice", Resource = "@xml/accessibilityservice")]
|
||||
[Register("com.x8bit.bitwarden.Accessibility.AccessibilityService")]
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
|
||||
<MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
|
||||
<MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
|
||||
<TargetFrameworkVersion>v11.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v12.1</TargetFrameworkVersion>
|
||||
<AndroidHttpClientHandlerType>Xamarin.Android.Net.AndroidClientHandler</AndroidHttpClientHandlerType>
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
@@ -75,24 +75,24 @@
|
||||
<Version>2.1.0.4</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Portable.BouncyCastle">
|
||||
<Version>1.8.10</Version>
|
||||
<Version>1.9.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.AndroidX.AppCompat" Version="1.3.1.3" />
|
||||
<PackageReference Include="Xamarin.AndroidX.AutoFill" Version="1.1.0.9" />
|
||||
<PackageReference Include="Xamarin.AndroidX.CardView" Version="1.0.0.11" />
|
||||
<PackageReference Include="Xamarin.AndroidX.Legacy.Support.V4" Version="1.0.0.10" />
|
||||
<PackageReference Include="Xamarin.AndroidX.MediaRouter" Version="1.2.5.2" />
|
||||
<PackageReference Include="Xamarin.AndroidX.Migration" Version="1.0.8" />
|
||||
<PackageReference Include="Xamarin.AndroidX.AppCompat" Version="1.5.1" />
|
||||
<PackageReference Include="Xamarin.AndroidX.AutoFill" Version="1.1.0.13" />
|
||||
<PackageReference Include="Xamarin.AndroidX.CardView" Version="1.0.0.16" />
|
||||
<PackageReference Include="Xamarin.AndroidX.Core" Version="1.9.0" />
|
||||
<PackageReference Include="Xamarin.AndroidX.Legacy.Support.V4" Version="1.0.0.14" />
|
||||
<PackageReference Include="Xamarin.AndroidX.MediaRouter" Version="1.3.1" />
|
||||
<PackageReference Include="Xamarin.Essentials">
|
||||
<Version>1.7.3</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Firebase.Messaging">
|
||||
<Version>122.0.0</Version>
|
||||
<Version>123.0.8</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Google.Android.Material" Version="1.4.0.4" />
|
||||
<PackageReference Include="Xamarin.Google.Dagger" Version="2.37.0" />
|
||||
<PackageReference Include="Xamarin.Google.Android.Material" Version="1.6.1.1" />
|
||||
<PackageReference Include="Xamarin.Google.Dagger" Version="2.41.0.2" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.SafetyNet">
|
||||
<Version>117.0.1</Version>
|
||||
<Version>118.0.1.2</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@@ -176,6 +176,7 @@
|
||||
<AndroidResource Include="Resources\drawable\cog_settings.xml" />
|
||||
<AndroidResource Include="Resources\drawable\icon.xml" />
|
||||
<AndroidResource Include="Resources\drawable\ic_launcher_foreground.xml" />
|
||||
<AndroidResource Include="Resources\drawable\ic_launcher_monochrome.xml" />
|
||||
<AndroidResource Include="Resources\drawable\ic_warning.xml" />
|
||||
<AndroidResource Include="Resources\drawable\id.xml" />
|
||||
<AndroidResource Include="Resources\drawable\info.xml" />
|
||||
@@ -213,6 +214,9 @@
|
||||
<AndroidResource Include="Resources\values\colors.xml" />
|
||||
<AndroidResource Include="Resources\values\manifest.xml" />
|
||||
<AndroidResource Include="Resources\values-v30\manifest.xml" />
|
||||
<AndroidResource Include="Resources\drawable-v26\splash_screen_round.xml" />
|
||||
<AndroidResource Include="Resources\drawable\logo_rounded.xml" />
|
||||
<AndroidResource Include="Resources\drawable-night-v26\splash_screen_round.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\splash_screen.xml" />
|
||||
@@ -280,6 +284,8 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Resources\values-v30\" />
|
||||
<Folder Include="Resources\drawable-v26\" />
|
||||
<Folder Include="Resources\drawable-night-v26\" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -19,6 +19,7 @@ using AndroidX.AutoFill.Inline;
|
||||
using AndroidX.AutoFill.Inline.V1;
|
||||
using Bit.Core.Abstractions;
|
||||
using SaveFlags = Android.Service.Autofill.SaveFlags;
|
||||
using Bit.Droid.Utilities;
|
||||
|
||||
namespace Bit.Droid.Autofill
|
||||
{
|
||||
@@ -270,8 +271,7 @@ namespace Bit.Droid.Autofill
|
||||
return null;
|
||||
}
|
||||
intent.PutExtra("autofillFrameworkUri", uri);
|
||||
var pendingIntent = PendingIntent.GetActivity(context, ++_pendingIntentId, intent,
|
||||
PendingIntentFlags.CancelCurrent);
|
||||
var pendingIntent = PendingIntent.GetActivity(context, ++_pendingIntentId, intent, AndroidHelpers.AddPendingIntentMutabilityFlag(PendingIntentFlags.CancelCurrent, true));
|
||||
|
||||
var overlayPresentation = BuildOverlayPresentation(
|
||||
AppResources.AutofillWithBitwarden,
|
||||
@@ -324,7 +324,7 @@ namespace Bit.Droid.Autofill
|
||||
// InlinePresentation requires nonNull pending intent (even though we only utilize one for the
|
||||
// "my vault" presentation) so we're including an empty one here
|
||||
pendingIntent = PendingIntent.GetService(context, 0, new Intent(),
|
||||
PendingIntentFlags.OneShot | PendingIntentFlags.UpdateCurrent);
|
||||
AndroidHelpers.AddPendingIntentMutabilityFlag(PendingIntentFlags.OneShot | PendingIntentFlags.UpdateCurrent, true));
|
||||
}
|
||||
var slice = CreateInlinePresentationSlice(
|
||||
inlinePresentationSpec,
|
||||
|
||||
@@ -15,7 +15,7 @@ using Bit.Core.Utilities;
|
||||
|
||||
namespace Bit.Droid.Autofill
|
||||
{
|
||||
[Service(Permission = Manifest.Permission.BindAutofillService, Label = "Bitwarden")]
|
||||
[Service(Permission = Manifest.Permission.BindAutofillService, Label = "Bitwarden", Exported = true)]
|
||||
[IntentFilter(new string[] { "android.service.autofill.AutofillService" })]
|
||||
[MetaData("android.autofill", Resource = "@xml/autofillservice")]
|
||||
[Register("com.x8bit.bitwarden.Autofill.AutofillService")]
|
||||
|
||||
@@ -9,7 +9,7 @@ using Android.Content.Res;
|
||||
using Android.Nfc;
|
||||
using Android.OS;
|
||||
using Android.Runtime;
|
||||
using AndroidX.Core.Content;
|
||||
using Android.Views;
|
||||
using Bit.App.Abstractions;
|
||||
using Bit.App.Models;
|
||||
using Bit.App.Utilities;
|
||||
@@ -49,7 +49,7 @@ namespace Bit.Droid
|
||||
{
|
||||
var eventUploadIntent = new Intent(this, typeof(EventUploadReceiver));
|
||||
_eventUploadPendingIntent = PendingIntent.GetBroadcast(this, 0, eventUploadIntent,
|
||||
PendingIntentFlags.UpdateCurrent);
|
||||
AndroidHelpers.AddPendingIntentMutabilityFlag(PendingIntentFlags.UpdateCurrent, false));
|
||||
|
||||
var policy = new StrictMode.ThreadPolicy.Builder().PermitAll().Build();
|
||||
StrictMode.SetThreadPolicy(policy);
|
||||
@@ -278,7 +278,7 @@ namespace Bit.Droid
|
||||
{
|
||||
var intent = new Intent(this, Class);
|
||||
intent.AddFlags(ActivityFlags.SingleTop);
|
||||
var pendingIntent = PendingIntent.GetActivity(this, 0, intent, 0);
|
||||
var pendingIntent = PendingIntent.GetActivity(this, 0, intent, AndroidHelpers.AddPendingIntentMutabilityFlag(0, true));
|
||||
// register for all NDEF tags starting with http och https
|
||||
var ndef = new IntentFilter(NfcAdapter.ActionNdefDiscovered);
|
||||
ndef.AddDataScheme("http");
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?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="2022.8.1" android:installLocation="internalOnly" package="com.x8bit.bitwarden">
|
||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="30" />
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:versionCode="1" android:versionName="2022.9.2" android:installLocation="internalOnly" package="com.x8bit.bitwarden">
|
||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="32" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.NFC" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/darkgray"/>
|
||||
<foreground android:drawable="@drawable/logo_rounded"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/logo_rounded"/>
|
||||
</adaptive-icon>
|
||||
15
src/Android/Resources/drawable/ic_launcher_monochrome.xml
Normal file
15
src/Android/Resources/drawable/ic_launcher_monochrome.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<group
|
||||
android:scaleX="0.099"
|
||||
android:scaleY="0.099"
|
||||
android:translateX="24.3"
|
||||
android:translateY="24.3">
|
||||
<path
|
||||
android:fillColor="#ffffff"
|
||||
android:pathData="M481.4,102.2c-3.7,-3.7 -8.1,-5.6 -13.1,-5.6L131.7,96.6c-5.1,0 -9.4,1.9 -13.1,5.6C114.9,105.9 113,110.2 113,115.3v224.4c0,16.7 3.3,33.4 9.8,49.8c6.5,16.5 14.6,31.1 24.3,43.8c9.6,12.8 21.1,25.2 34.5,37.2c13.3,12.1 25.7,22.1 37,30.1c11.3,8 23.1,15.5 35.4,22.6c12.3,7.1 21,11.9 26.2,14.5c5.2,2.5 9.3,4.5 12.4,5.8c2.3,1.2 4.9,1.8 7.6,1.8c2.7,0 5.3,-0.6 7.6,-1.8c3.1,-1.4 7.3,-3.3 12.4,-5.8c5.2,-2.5 13.9,-7.4 26.2,-14.5c12.3,-7.1 24.1,-14.7 35.4,-22.6c11.3,-8 23.6,-18 37,-30.1c13.3,-12.1 24.8,-24.5 34.5,-37.2c9.6,-12.8 17.7,-27.4 24.2,-43.8c6.5,-16.5 9.8,-33.1 9.8,-49.8L487.3,115.3C487,110.2 485.1,105.9 481.4,102.2zM438,341.8C438,423 300,493 300,493L300,144.6h138C438,144.6 438,260.6 438,341.8z" />
|
||||
</group>
|
||||
</vector>
|
||||
14
src/Android/Resources/drawable/logo_rounded.xml
Normal file
14
src/Android/Resources/drawable/logo_rounded.xml
Normal file
@@ -0,0 +1,14 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<group android:scaleX="0.11454546"
|
||||
android:scaleY="0.11454546"
|
||||
android:translateX="31.663637"
|
||||
android:translateY="27.54">
|
||||
<path
|
||||
android:pathData="M376.4,12.2c-3.7,-3.7 -8.1,-5.6 -13.1,-5.6H26.7c-5.1,0 -9.4,1.9 -13.1,5.6C9.9,15.9 8,20.2 8,25.3v224.4c0,16.7 3.3,33.4 9.8,49.8c6.5,16.5 14.6,31.1 24.3,43.8c9.6,12.8 21.1,25.2 34.5,37.2c13.3,12.1 25.7,22.1 37,30.1c11.3,8 23.1,15.5 35.4,22.6c12.3,7.1 21,11.9 26.2,14.5c5.2,2.5 9.3,4.5 12.4,5.8c2.3,1.2 4.9,1.8 7.6,1.8c2.7,0 5.3,-0.6 7.6,-1.8c3.1,-1.4 7.3,-3.3 12.4,-5.8c5.2,-2.5 13.9,-7.4 26.2,-14.5c12.3,-7.1 24.1,-14.7 35.4,-22.6c11.3,-8 23.6,-18 37,-30.1c13.3,-12.1 24.8,-24.5 34.5,-37.2c9.6,-12.8 17.7,-27.4 24.2,-43.8c6.5,-16.5 9.8,-33.1 9.8,-49.8V25.3C382,20.2 380.1,15.9 376.4,12.2zM333,251.8C333,333 195,403 195,403V54.6h138C333,54.6 333,170.6 333,251.8z"
|
||||
android:fillColor="#FFFFFF"/>
|
||||
</group>
|
||||
</vector>
|
||||
@@ -2,5 +2,5 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_monochrome"/>
|
||||
</adaptive-icon>
|
||||
@@ -2,5 +2,5 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_monochrome"/>
|
||||
</adaptive-icon>
|
||||
@@ -4,6 +4,7 @@
|
||||
<style name="LaunchTheme" parent="BaseTheme">
|
||||
<item name="android:windowBackground">@drawable/splash_screen_dark</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/splash_screen_round</item>
|
||||
</style>
|
||||
|
||||
<style name="BaseTheme" parent="Theme.AppCompat">
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
<style name="LaunchTheme" parent="BaseTheme">
|
||||
<item name="android:windowBackground">@drawable/splash_screen</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<item name="android:windowSplashScreenBackground">@color/ic_launcher_background</item>
|
||||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/splash_screen_round</item>
|
||||
</style>
|
||||
|
||||
<style name="BaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||
|
||||
@@ -5,6 +5,7 @@ using Android.Content;
|
||||
using Android.OS;
|
||||
using Bit.Core.Abstractions;
|
||||
using Bit.Droid.Receivers;
|
||||
using Bit.Droid.Utilities;
|
||||
using Plugin.CurrentActivity;
|
||||
using Xamarin.Essentials;
|
||||
|
||||
@@ -23,7 +24,7 @@ namespace Bit.Droid.Services
|
||||
PendingIntent.GetBroadcast(CrossCurrentActivity.Current.Activity,
|
||||
0,
|
||||
new Intent(CrossCurrentActivity.Current.Activity, typeof(ClearClipboardAlarmReceiver)),
|
||||
PendingIntentFlags.UpdateCurrent));
|
||||
AndroidHelpers.AddPendingIntentMutabilityFlag(PendingIntentFlags.UpdateCurrent, false)));
|
||||
}
|
||||
|
||||
public async Task CopyTextAsync(string text, int expiresInMs = -1, bool isSensitive = true)
|
||||
|
||||
@@ -12,7 +12,7 @@ using Java.Lang;
|
||||
namespace Bit.Droid.Tile
|
||||
{
|
||||
[Service(Permission = Manifest.Permission.BindQuickSettingsTile, Label = "@string/AutoFillTile",
|
||||
Icon = "@drawable/shield")]
|
||||
Icon = "@drawable/shield", Exported = true)]
|
||||
[IntentFilter(new string[] { ActionQsTile })]
|
||||
[Register("com.x8bit.bitwarden.AutofillTileService")]
|
||||
public class AutofillTileService : TileService
|
||||
|
||||
@@ -14,7 +14,7 @@ using Java.Lang;
|
||||
|
||||
namespace Bit.Droid.Tile
|
||||
{
|
||||
[Service(Permission = Android.Manifest.Permission.BindQuickSettingsTile, Label = "@string/PasswordGenerator",
|
||||
[Service(Permission = Android.Manifest.Permission.BindQuickSettingsTile, Exported = true, Label = "@string/PasswordGenerator",
|
||||
Icon = "@drawable/generate")]
|
||||
[IntentFilter(new string[] { ActionQsTile })]
|
||||
[Register("com.x8bit.bitwarden.GeneratorTileService")]
|
||||
|
||||
@@ -15,7 +15,8 @@ using Java.Lang;
|
||||
namespace Bit.Droid.Tile
|
||||
{
|
||||
[Service(Permission = Android.Manifest.Permission.BindQuickSettingsTile, Label = "@string/MyVault",
|
||||
Icon = "@drawable/shield")]
|
||||
Icon = "@drawable/shield",
|
||||
Exported = true)]
|
||||
[IntentFilter(new string[] { ActionQsTile })]
|
||||
[Register("com.x8bit.bitwarden.MyVaultTileService")]
|
||||
public class MyVaultTileService : TileService
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.OS;
|
||||
using Android.Provider;
|
||||
using Bit.App.Utilities;
|
||||
|
||||
@@ -47,5 +49,22 @@ namespace Bit.Droid.Utilities
|
||||
await AppHelpers.SetPreconfiguredSettingsAsync(dict);
|
||||
}
|
||||
}
|
||||
|
||||
public static PendingIntentFlags AddPendingIntentMutabilityFlag(PendingIntentFlags pendingIntentFlags, bool isMutable)
|
||||
{
|
||||
//Mutable flag was added on API level 31
|
||||
if (isMutable && Build.VERSION.SdkInt >= BuildVersionCodes.S)
|
||||
{
|
||||
return pendingIntentFlags | PendingIntentFlags.Mutable;
|
||||
}
|
||||
|
||||
//Immutable flag was added on API level 23
|
||||
if (!isMutable && Build.VERSION.SdkInt >= BuildVersionCodes.M)
|
||||
{
|
||||
return pendingIntentFlags | PendingIntentFlags.Immutable;
|
||||
}
|
||||
|
||||
return pendingIntentFlags;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,8 @@ namespace Bit.Droid
|
||||
{
|
||||
[Activity(
|
||||
NoHistory = true,
|
||||
LaunchMode = LaunchMode.SingleTop)]
|
||||
LaunchMode = LaunchMode.SingleTop,
|
||||
Exported = true)]
|
||||
[IntentFilter(new[] { Android.Content.Intent.ActionView },
|
||||
Categories = new[] { Android.Content.Intent.CategoryDefault, Android.Content.Intent.CategoryBrowsable },
|
||||
DataScheme = "bitwarden")]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<TargetFramework>netstandard2.1</TargetFramework>
|
||||
<RootNamespace>Bit.App</RootNamespace>
|
||||
<AssemblyName>BitwardenApp</AssemblyName>
|
||||
<Configurations>Debug;Release;FDroid</Configurations>
|
||||
@@ -14,11 +14,11 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Plugin.Fingerprint" Version="2.1.5" />
|
||||
<PackageReference Include="SkiaSharp.Views.Forms" Version="2.80.3" />
|
||||
<PackageReference Include="Xamarin.CommunityToolkit" Version="2.0.2" />
|
||||
<PackageReference Include="SkiaSharp.Views.Forms" Version="2.88.2" />
|
||||
<PackageReference Include="Xamarin.CommunityToolkit" Version="2.0.5" />
|
||||
<PackageReference Include="Xamarin.Essentials" Version="1.7.3" />
|
||||
<PackageReference Include="Xamarin.FFImageLoading.Forms" Version="2.4.11.982" />
|
||||
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2478" />
|
||||
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2515" />
|
||||
<PackageReference Include="ZXing.Net.Mobile" Version="2.4.1" />
|
||||
<PackageReference Include="ZXing.Net.Mobile.Forms" Version="2.4.1" />
|
||||
<PackageReference Include="Xamarin.CommunityToolkit" Version="1.3.0" />
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
<ContentPage.ToolbarItems>
|
||||
<ToolbarItem Text="{u:I18n Close}" Clicked="Close_Clicked" Order="Primary" Priority="-1" />
|
||||
<ToolbarItem Text="{u:I18n Save}" Clicked="Save_Clicked" />
|
||||
<ToolbarItem Text="{u:I18n Save}" Command="{Binding SubmitAsyncCommand}" />
|
||||
</ContentPage.ToolbarItems>
|
||||
|
||||
<ContentPage.Resources>
|
||||
|
||||
@@ -51,14 +51,6 @@ namespace Bit.App.Pages
|
||||
}
|
||||
}
|
||||
|
||||
private async void Save_Clicked(object sender, EventArgs e)
|
||||
{
|
||||
if (DoOnce())
|
||||
{
|
||||
await _vm.SubmitAsync();
|
||||
}
|
||||
}
|
||||
|
||||
private async void ChooseFile_Clicked(object sender, EventArgs e)
|
||||
{
|
||||
if (DoOnce())
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Bit.App.Abstractions;
|
||||
using Bit.App.Resources;
|
||||
using Bit.Core.Abstractions;
|
||||
@@ -8,6 +10,7 @@ using Bit.Core.Exceptions;
|
||||
using Bit.Core.Models.Domain;
|
||||
using Bit.Core.Models.View;
|
||||
using Bit.Core.Utilities;
|
||||
using Xamarin.CommunityToolkit.ObjectModel;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Bit.App.Pages
|
||||
@@ -20,6 +23,7 @@ namespace Bit.App.Pages
|
||||
private readonly IStateService _stateService;
|
||||
private readonly IVaultTimeoutService _vaultTimeoutService;
|
||||
private readonly IPlatformUtilsService _platformUtilsService;
|
||||
private readonly ILogger _logger;
|
||||
private CipherView _cipher;
|
||||
private Cipher _cipherDomain;
|
||||
private bool _hasAttachments;
|
||||
@@ -35,8 +39,10 @@ namespace Bit.App.Pages
|
||||
_platformUtilsService = ServiceContainer.Resolve<IPlatformUtilsService>("platformUtilsService");
|
||||
_stateService = ServiceContainer.Resolve<IStateService>("stateService");
|
||||
_vaultTimeoutService = ServiceContainer.Resolve<IVaultTimeoutService>("vaultTimeoutService");
|
||||
_logger = ServiceContainer.Resolve<ILogger>();
|
||||
Attachments = new ExtendedObservableCollection<AttachmentView>();
|
||||
DeleteAttachmentCommand = new Command<AttachmentView>(DeleteAsync);
|
||||
SubmitAsyncCommand = new AsyncCommand(SubmitAsync, allowsMultipleExecutions: false);
|
||||
PageTitle = AppResources.Attachments;
|
||||
}
|
||||
|
||||
@@ -59,6 +65,7 @@ namespace Bit.App.Pages
|
||||
}
|
||||
public byte[] FileData { get; set; }
|
||||
public Command DeleteAttachmentCommand { get; set; }
|
||||
public ICommand SubmitAsyncCommand { get; }
|
||||
|
||||
public async Task InitAsync()
|
||||
{
|
||||
@@ -125,6 +132,7 @@ namespace Bit.App.Pages
|
||||
}
|
||||
catch (ApiException e)
|
||||
{
|
||||
_logger.Exception(e);
|
||||
await _deviceActionService.HideLoadingAsync();
|
||||
if (e?.Error != null)
|
||||
{
|
||||
@@ -132,6 +140,12 @@ namespace Bit.App.Pages
|
||||
AppResources.AnErrorHasOccurred);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.Exception(e);
|
||||
await _deviceActionService.HideLoadingAsync();
|
||||
await _platformUtilsService.ShowDialogAsync(AppResources.GenericErrorMessage, AppResources.AnErrorHasOccurred);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -202,7 +202,7 @@ namespace Bit.App.Pages
|
||||
}
|
||||
}
|
||||
|
||||
public bool ShowUpgradePremiumTotpText => !CanAccessPremium && ShowTotp;
|
||||
public bool ShowUpgradePremiumTotpText => !CanAccessPremium && !Cipher.OrganizationUseTotp && ShowTotp;
|
||||
public bool ShowUris => IsLogin && Cipher.Login.HasUris;
|
||||
public bool ShowIdentityAddress => IsIdentity && (
|
||||
!string.IsNullOrWhiteSpace(Cipher.Identity.Address1) ||
|
||||
@@ -216,7 +216,7 @@ namespace Bit.App.Pages
|
||||
public string PasswordVisibilityAccessibilityText => ShowPassword ? AppResources.PasswordIsVisibleTapToHide : AppResources.PasswordIsNotVisibleTapToShow;
|
||||
public string TotpCodeFormatted
|
||||
{
|
||||
get => _canAccessPremium ? _totpCodeFormatted : string.Empty;
|
||||
get => ShowUpgradePremiumTotpText ? string.Empty : _totpCodeFormatted;
|
||||
set => SetProperty(ref _totpCodeFormatted, value,
|
||||
additionalPropertyNames: new string[]
|
||||
{
|
||||
|
||||
@@ -204,7 +204,6 @@ namespace Bit.App.Pages
|
||||
{
|
||||
PageTitle = ShowVaultFilter ? AppResources.Vaults : AppResources.MyVault;
|
||||
}
|
||||
var canAccessPremium = await _stateService.CanAccessPremiumAsync();
|
||||
_doingLoad = true;
|
||||
LoadedOnce = true;
|
||||
ShowNoData = false;
|
||||
@@ -235,7 +234,7 @@ namespace Bit.App.Pages
|
||||
}
|
||||
if (MainPage)
|
||||
{
|
||||
AddTotpGroupItem(canAccessPremium, groupedItems, uppercaseGroupNames);
|
||||
AddTotpGroupItem(groupedItems, uppercaseGroupNames);
|
||||
|
||||
groupedItems.Add(new GroupingsPageListGroup(
|
||||
AppResources.Types, 4, uppercaseGroupNames, !hasFavorites)
|
||||
@@ -386,9 +385,9 @@ namespace Bit.App.Pages
|
||||
}
|
||||
}
|
||||
|
||||
private void AddTotpGroupItem(bool canAccessPremium, List<GroupingsPageListGroup> groupedItems, bool uppercaseGroupNames)
|
||||
private void AddTotpGroupItem(List<GroupingsPageListGroup> groupedItems, bool uppercaseGroupNames)
|
||||
{
|
||||
if (canAccessPremium && TOTPCiphers?.Any() == true)
|
||||
if (TOTPCiphers?.Any() == true)
|
||||
{
|
||||
groupedItems.Insert(0, new GroupingsPageListGroup(
|
||||
AppResources.Totp, 1, uppercaseGroupNames, false)
|
||||
@@ -541,10 +540,11 @@ namespace Bit.App.Pages
|
||||
|
||||
private async Task LoadDataAsync()
|
||||
{
|
||||
var canAccessPremium = await _stateService.CanAccessPremiumAsync();
|
||||
NoDataText = AppResources.NoItems;
|
||||
_allCiphers = await GetAllCiphersAsync();
|
||||
HasCiphers = _allCiphers.Any();
|
||||
TOTPCiphers = _allCiphers.Where(c => c.IsDeleted == Deleted && c.Type == CipherType.Login && !string.IsNullOrEmpty(c.Login?.Totp)).ToList();
|
||||
TOTPCiphers = _allCiphers.Where(c => c.IsDeleted == Deleted && c.Type == CipherType.Login && !string.IsNullOrEmpty(c.Login?.Totp) && (c.OrganizationUseTotp || canAccessPremium)).ToList();
|
||||
FavoriteCiphers?.Clear();
|
||||
NoFolderCiphers?.Clear();
|
||||
_folderCounts.Clear();
|
||||
|
||||
@@ -2315,44 +2315,44 @@
|
||||
<value>هل أنت متأكد من أنك تريد تمكين التقاط الشاشة؟</value>
|
||||
</data>
|
||||
<data name="PasswordType" xml:space="preserve">
|
||||
<value>Password Type</value>
|
||||
<value>نوع كلمة المرور</value>
|
||||
</data>
|
||||
<data name="WhatWouldYouLikeToGenerate" xml:space="preserve">
|
||||
<value>What would you like to generate?</value>
|
||||
<value>ما الذي ترغب في توليده؟</value>
|
||||
</data>
|
||||
<data name="UsernameType" xml:space="preserve">
|
||||
<value>Username Type</value>
|
||||
<value>نوع اسم المستخدم</value>
|
||||
</data>
|
||||
<data name="PlusAddressedEmail" xml:space="preserve">
|
||||
<value>Plus Addressed Email</value>
|
||||
<value>بريد إلكتروني موجه أكثر</value>
|
||||
</data>
|
||||
<data name="CatchAllEmail" xml:space="preserve">
|
||||
<value>Catch-all Email</value>
|
||||
<value>تجميع كل البريد</value>
|
||||
</data>
|
||||
<data name="ForwardedEmailAlias" xml:space="preserve">
|
||||
<value>Forwarded Email Alias</value>
|
||||
<value>إعادة توجيه الاسم المستعار للبريد الإلكتروني</value>
|
||||
</data>
|
||||
<data name="RandomWord" xml:space="preserve">
|
||||
<value>Random Word</value>
|
||||
<value>كلمة عشوائية</value>
|
||||
</data>
|
||||
<data name="EmailRequiredParenthesis" xml:space="preserve">
|
||||
<value>Email (required)</value>
|
||||
<value>البريد الإلكتروني (مطلوب)</value>
|
||||
</data>
|
||||
<data name="DomainNameRequiredParenthesis" xml:space="preserve">
|
||||
<value>Domain Name (required)</value>
|
||||
<value>اسم المجال (مطلوب)</value>
|
||||
</data>
|
||||
<data name="APIKeyRequiredParenthesis" xml:space="preserve">
|
||||
<value>API Key (required)</value>
|
||||
<value>مفتاح API (مطلوب)</value>
|
||||
</data>
|
||||
<data name="Service" xml:space="preserve">
|
||||
<value>Service</value>
|
||||
<value>الخدمة</value>
|
||||
</data>
|
||||
<data name="AnonAddy" xml:space="preserve">
|
||||
<value>AnonAddy</value>
|
||||
<comment>"AnonAddy" is the product name and should not be translated.</comment>
|
||||
</data>
|
||||
<data name="FirefoxRelay" xml:space="preserve">
|
||||
<value>Firefox Relay</value>
|
||||
<value>FirefoxRelay</value>
|
||||
<comment>"Firefox Relay" is the product name and should not be translated.</comment>
|
||||
</data>
|
||||
<data name="SimpleLogin" xml:space="preserve">
|
||||
@@ -2360,33 +2360,33 @@
|
||||
<comment>"SimpleLogin" is the product name and should not be translated.</comment>
|
||||
</data>
|
||||
<data name="APIAccessToken" xml:space="preserve">
|
||||
<value>API Access Token</value>
|
||||
<value>رمز الوصول API</value>
|
||||
</data>
|
||||
<data name="AreYouSureYouWantToOverwriteTheCurrentUsername" xml:space="preserve">
|
||||
<value>Are you sure you want to overwrite the current username?</value>
|
||||
<value>هل أنت متأكد من أنك تريد الكتابة فوق اسم المستخدم الحالي؟</value>
|
||||
</data>
|
||||
<data name="GenerateUsername" xml:space="preserve">
|
||||
<value>Generate Username</value>
|
||||
<value>إنشاء اسم المستخدم</value>
|
||||
</data>
|
||||
<data name="EmailType" xml:space="preserve">
|
||||
<value>Email Type</value>
|
||||
<value>نوع البريد الإلكتروني</value>
|
||||
</data>
|
||||
<data name="WebsiteRequired" xml:space="preserve">
|
||||
<value>Website (required)</value>
|
||||
<value>الموقع (مطلوب)</value>
|
||||
</data>
|
||||
<data name="UnknownXErrorMessage" xml:space="preserve">
|
||||
<value>Unknown {0} error occurred.</value>
|
||||
<value>حدث خطأ {0} غير معروف.</value>
|
||||
</data>
|
||||
<data name="PlusAddressedEmailDescription" xml:space="preserve">
|
||||
<value>Use your email provider's subaddress capabilities</value>
|
||||
<value>استخدم قدرات العنوان الفرعي لمقدم البريد الإلكتروني الخاص بك</value>
|
||||
</data>
|
||||
<data name="CatchAllEmailDescription" xml:space="preserve">
|
||||
<value>Use your domain's configured catch-all inbox.</value>
|
||||
<value>استخدم علبة البريد الإلكتروني الشاملة التي تم تكوينها في نطاقك.</value>
|
||||
</data>
|
||||
<data name="ForwardedEmailDescription" xml:space="preserve">
|
||||
<value>Generate an email alias with an external forwarding service.</value>
|
||||
<value>إنشاء بريد إلكتروني مستعار مع خدمة إعادة توجيه خارجية.</value>
|
||||
</data>
|
||||
<data name="Random" xml:space="preserve">
|
||||
<value>Random</value>
|
||||
<value>عشوائي</value>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1553,7 +1553,7 @@
|
||||
<value>Προεπιλεγμένο σκοτεινό θέμα</value>
|
||||
</data>
|
||||
<data name="DefaultDarkThemeDescription" xml:space="preserve">
|
||||
<value>Choose the dark theme to use when using Default (System) theme while your device's dark mode is enabled.</value>
|
||||
<value>Επιλέξτε το σκούρο θέμα που θα χρησιμοποιηθεί όταν χρησιμοποιείτε το προεπιλεγμένο (System) θέμα ενώ η σκοτεινή λειτουργία της συσκευής σας είναι ενεργοποιημένη.</value>
|
||||
</data>
|
||||
<data name="CopyNotes" xml:space="preserve">
|
||||
<value>Αντιγραφή Σημειώσεων</value>
|
||||
@@ -1576,16 +1576,16 @@
|
||||
<comment>'Nord' is the name of a specific color scheme. It should not be translated.</comment>
|
||||
</data>
|
||||
<data name="AutofillBlockedUris" xml:space="preserve">
|
||||
<value>Auto-fill blocked URIs</value>
|
||||
<value>Αυτόματη συμπλήρωση μπλοκαρισμένων URIs</value>
|
||||
</data>
|
||||
<data name="AutofillBlockedUrisDescription" xml:space="preserve">
|
||||
<value>Auto-fill will not be offered for blocked URIs. Separate multiple URIs with a comma. For example: "https://twitter.com, androidapp://com.twitter.android".</value>
|
||||
<value>Η αυτόματη συμπλήρωση δεν θα προσφερθεί για μπλοκαρισμένα URI. Ξεχωρίστε πολλαπλά URI με κόμμα. Για παράδειγμα: "https://twitter.com, androidapp://com.twitter.android".</value>
|
||||
</data>
|
||||
<data name="AskToAddLogin" xml:space="preserve">
|
||||
<value>Ask to add login</value>
|
||||
<value>Ζητήστε να προσθέστε σύνδεση</value>
|
||||
</data>
|
||||
<data name="AskToAddLoginDescription" xml:space="preserve">
|
||||
<value>Ask to add an item if one isn't found in your vault.</value>
|
||||
<value>Ζητήστε να προσθέσετε ένα αντικείμενο αν δε βρεθεί στην κρύπτη σας.</value>
|
||||
</data>
|
||||
<data name="OnRestart" xml:space="preserve">
|
||||
<value>Κατά την Επανεκκίνηση Εφαρμογής</value>
|
||||
@@ -1898,16 +1898,16 @@
|
||||
<value>Το αρχείο που θέλετε να στείλετε.</value>
|
||||
</data>
|
||||
<data name="FileTypeIsSelected" xml:space="preserve">
|
||||
<value>File type is selected.</value>
|
||||
<value>Ο τύπος αρχείου είναι επιλεγμένος.</value>
|
||||
</data>
|
||||
<data name="FileTypeIsNotSelected" xml:space="preserve">
|
||||
<value>File type is not selected, tap to select.</value>
|
||||
<value>Ο τύπος αρχείου δεν είναι επιλεγμένος, πατήστε για επιλογή.</value>
|
||||
</data>
|
||||
<data name="TextTypeIsSelected" xml:space="preserve">
|
||||
<value>Text type is selected.</value>
|
||||
<value>Ο τύπος κειμένου είναι επιλεγμένος.</value>
|
||||
</data>
|
||||
<data name="TextTypeIsNotSelected" xml:space="preserve">
|
||||
<value>Text type is not selected, tap to select.</value>
|
||||
<value>Ο τύπος κειμένου δεν είναι επιλεγμένος, πατήστε για επιλογή.</value>
|
||||
</data>
|
||||
<data name="DeletionDate" xml:space="preserve">
|
||||
<value>Ημερομηνία διαγραφής</value>
|
||||
@@ -2214,40 +2214,40 @@
|
||||
<value>Εισάγετε τον κωδικό επαλήθευσης που έχει σταλεί στο email σας</value>
|
||||
</data>
|
||||
<data name="SubmitCrashLogs" xml:space="preserve">
|
||||
<value>Submit crash logs</value>
|
||||
<value>Υποβολή αρχείου καταγραφής σφαλμάτων</value>
|
||||
</data>
|
||||
<data name="SubmitCrashLogsDescription" xml:space="preserve">
|
||||
<value>Help Bitwarden improve app stability by submitting crash reports.</value>
|
||||
<value>Βοηθήστε το Bitwarden να βελτιώσει τη σταθερότητα της εφαρμογής υποβάλλοντας αναφορές κολλημάτων.</value>
|
||||
</data>
|
||||
<data name="OptionsExpanded" xml:space="preserve">
|
||||
<value>Options are expanded, tap to collapse.</value>
|
||||
<value>Οι επιλογές έχουν επεκταθεί, πατήστε για κατάρρευση.</value>
|
||||
</data>
|
||||
<data name="OptionsCollapsed" xml:space="preserve">
|
||||
<value>Options are collapsed, tap to expand.</value>
|
||||
<value>Οι επιλογές έχουν συμπτυχθεί, πατήστε για επέκταση.</value>
|
||||
</data>
|
||||
<data name="UppercaseAtoZ" xml:space="preserve">
|
||||
<value>Uppercase (A to Z)</value>
|
||||
<value>Κεφαλαία (A-Z)</value>
|
||||
</data>
|
||||
<data name="LowercaseAtoZ" xml:space="preserve">
|
||||
<value>Lowercase (A to Z)</value>
|
||||
<value>Πεζά (A-Z)</value>
|
||||
</data>
|
||||
<data name="NumbersZeroToNine" xml:space="preserve">
|
||||
<value>Numbers (0 to 9)</value>
|
||||
<value>Αριθμοί (0-9)</value>
|
||||
</data>
|
||||
<data name="SpecialCharacters" xml:space="preserve">
|
||||
<value>Special Characters (!@#$%^&*)</value>
|
||||
<value>Ειδικοί Χαρακτήρες (!@#$%^&*)</value>
|
||||
</data>
|
||||
<data name="TapToGoBack" xml:space="preserve">
|
||||
<value>Tap to go back</value>
|
||||
<value>Πατήστε για να πάτε πίσω</value>
|
||||
</data>
|
||||
<data name="PasswordIsVisibleTapToHide" xml:space="preserve">
|
||||
<value>Password is visible, tap to hide.</value>
|
||||
<value>Ο κωδικός πρόσβασης είναι ορατός, πατήστε για απόκρυψη.</value>
|
||||
</data>
|
||||
<data name="PasswordIsNotVisibleTapToShow" xml:space="preserve">
|
||||
<value>Password is not visible, tap to show.</value>
|
||||
<value>Ο κωδικός πρόσβασης δεν είναι ορατός, πατήστε για εμφάνιση.</value>
|
||||
</data>
|
||||
<data name="FilterByVault" xml:space="preserve">
|
||||
<value>Filter items by vault</value>
|
||||
<value>Φιλτράρισμα αντικειμένων ανά κρύπτη</value>
|
||||
</data>
|
||||
<data name="AllVaults" xml:space="preserve">
|
||||
<value>Όλα τα Vaults</value>
|
||||
@@ -2265,86 +2265,86 @@
|
||||
<value>TOTP</value>
|
||||
</data>
|
||||
<data name="VerificationCodes" xml:space="preserve">
|
||||
<value>Verification Codes</value>
|
||||
<value>Κωδικοί Επαλήθευσης</value>
|
||||
</data>
|
||||
<data name="PremiumSubscriptionRequired" xml:space="preserve">
|
||||
<value>Premium subscription required</value>
|
||||
<value>Απαιτείται συνδρομή Premium</value>
|
||||
</data>
|
||||
<data name="CannotAddAuthenticatorKey" xml:space="preserve">
|
||||
<value>Cannot add authenticator key? </value>
|
||||
<value>Αδυναμία προσθήκης κλειδιού ταυτοποίησης; </value>
|
||||
</data>
|
||||
<data name="ScanQRCode" xml:space="preserve">
|
||||
<value>Scan QR Code</value>
|
||||
<value>Σάρωση κωδικού QR</value>
|
||||
</data>
|
||||
<data name="CannotScanQRCode" xml:space="preserve">
|
||||
<value>Cannot scan QR Code? </value>
|
||||
<value>Αδυναμία σάρωσης κωδικού QR; </value>
|
||||
</data>
|
||||
<data name="AuthenticatorKeyScanner" xml:space="preserve">
|
||||
<value>Authenticator Key</value>
|
||||
<value>Κλειδί επαλήθευσης</value>
|
||||
</data>
|
||||
<data name="EnterKeyManually" xml:space="preserve">
|
||||
<value>Enter Key Manually</value>
|
||||
<value>Χειροκίνητη Εισαγωγή Κλειδιού</value>
|
||||
</data>
|
||||
<data name="AddTotp" xml:space="preserve">
|
||||
<value>Add TOTP</value>
|
||||
<value>Προσθήκη TOTP</value>
|
||||
</data>
|
||||
<data name="SetupTotp" xml:space="preserve">
|
||||
<value>Set up TOTP</value>
|
||||
<value>Ρύθμιση TOTP</value>
|
||||
</data>
|
||||
<data name="OnceTheKeyIsSuccessfullyEntered" xml:space="preserve">
|
||||
<value>Once the key is successfully entered,
|
||||
select Add TOTP to store the key safely</value>
|
||||
<value>Μόλις το κλειδί εισαχθεί με επιτυχία,
|
||||
επιλέξτε Προσθήκη TOTP για να αποθηκεύσετε το κλειδί με ασφάλεια</value>
|
||||
</data>
|
||||
<data name="SelectAddTotpToStoreTheKeySafely" xml:space="preserve">
|
||||
<value></value>
|
||||
</data>
|
||||
<data name="NeverLockWarning" xml:space="preserve">
|
||||
<value>Setting your lock options to “Never” keeps your vault available to anyone with access to your device. If you use this option, you should ensure that you keep your device properly protected.</value>
|
||||
<value>Ρυθμίζοντας τις επιλογές κλειδώματος σε “Ποτέ” κρατά τη κρύπτη σας διαθέσιμη σε οποιονδήποτε με πρόσβαση στη συσκευή σας. Εάν χρησιμοποιείτε αυτήν την επιλογή, θα πρέπει να διασφαλίσετε ότι διατηρείτε τη συσκευή σας σωστά προστατευμένη.</value>
|
||||
</data>
|
||||
<data name="EnvironmentPageUrlsError" xml:space="preserve">
|
||||
<value>One or more of the URLs entered are invalid. Please revise it and try to save again.</value>
|
||||
<value>Ένα ή περισσότερα από τα καταχωρημένα URL δεν είναι έγκυρα. Παρακαλώ αναθεωρήστε το και προσπαθήστε να αποθηκεύσετε ξανά.</value>
|
||||
</data>
|
||||
<data name="GenericErrorMessage" xml:space="preserve">
|
||||
<value>We were unable to process your request. Please try again or contact us.</value>
|
||||
<value>Δεν μπορούμε να επεξεργαστούμε το αίτημά σας τώρα. Παρακαλούμε προσπαθήστε ξανά ή επικοινωνήστε με την υποστήριξη.</value>
|
||||
</data>
|
||||
<data name="AllowScreenCapture" xml:space="preserve">
|
||||
<value>Allow screen capture</value>
|
||||
<value>Να επιτρέπεται η καταγραφή οθόνης</value>
|
||||
</data>
|
||||
<data name="AreYouSureYouWantToEnableScreenCapture" xml:space="preserve">
|
||||
<value>Are you sure you want to enable Screen Capture?</value>
|
||||
<value>Είστε βέβαιοι ότι θέλετε να ενεργοποιήσετε την καταγραφή οθόνης;</value>
|
||||
</data>
|
||||
<data name="PasswordType" xml:space="preserve">
|
||||
<value>Password Type</value>
|
||||
<value>Τύπος Κωδικού</value>
|
||||
</data>
|
||||
<data name="WhatWouldYouLikeToGenerate" xml:space="preserve">
|
||||
<value>What would you like to generate?</value>
|
||||
<value>Τι θα θέλατε να δημιουργήσετε;</value>
|
||||
</data>
|
||||
<data name="UsernameType" xml:space="preserve">
|
||||
<value>Username Type</value>
|
||||
<value>Τύπος Ονόματος Χρήστη</value>
|
||||
</data>
|
||||
<data name="PlusAddressedEmail" xml:space="preserve">
|
||||
<value>Plus Addressed Email</value>
|
||||
<value>Συν Διεύθυνση Email</value>
|
||||
</data>
|
||||
<data name="CatchAllEmail" xml:space="preserve">
|
||||
<value>Catch-all Email</value>
|
||||
</data>
|
||||
<data name="ForwardedEmailAlias" xml:space="preserve">
|
||||
<value>Forwarded Email Alias</value>
|
||||
<value>Προωθημένο Ψευδώνυμο Email</value>
|
||||
</data>
|
||||
<data name="RandomWord" xml:space="preserve">
|
||||
<value>Random Word</value>
|
||||
<value>Τυχαία Λέξη</value>
|
||||
</data>
|
||||
<data name="EmailRequiredParenthesis" xml:space="preserve">
|
||||
<value>Email (required)</value>
|
||||
<value>Email (απαιτείται)</value>
|
||||
</data>
|
||||
<data name="DomainNameRequiredParenthesis" xml:space="preserve">
|
||||
<value>Domain Name (required)</value>
|
||||
<value>Όνομα Τομέα (απαιτείται)</value>
|
||||
</data>
|
||||
<data name="APIKeyRequiredParenthesis" xml:space="preserve">
|
||||
<value>API Key (required)</value>
|
||||
<value>Κλειδί API (απαιτείται)</value>
|
||||
</data>
|
||||
<data name="Service" xml:space="preserve">
|
||||
<value>Service</value>
|
||||
<value>Υπηρεσία</value>
|
||||
</data>
|
||||
<data name="AnonAddy" xml:space="preserve">
|
||||
<value>AnonAddy</value>
|
||||
@@ -2362,30 +2362,30 @@ select Add TOTP to store the key safely</value>
|
||||
<value>API Access Token</value>
|
||||
</data>
|
||||
<data name="AreYouSureYouWantToOverwriteTheCurrentUsername" xml:space="preserve">
|
||||
<value>Are you sure you want to overwrite the current username?</value>
|
||||
<value>Είστε βέβαιοι ότι θέλετε να αντικαταστήσετε το τρέχον όνομα χρήστη;</value>
|
||||
</data>
|
||||
<data name="GenerateUsername" xml:space="preserve">
|
||||
<value>Generate Username</value>
|
||||
<value>Δημιουργία Ονόματος Χρήστη</value>
|
||||
</data>
|
||||
<data name="EmailType" xml:space="preserve">
|
||||
<value>Email Type</value>
|
||||
<value>Τύπος Email</value>
|
||||
</data>
|
||||
<data name="WebsiteRequired" xml:space="preserve">
|
||||
<value>Website (required)</value>
|
||||
<value>Ιστοσελίδα (απαιτείται)</value>
|
||||
</data>
|
||||
<data name="UnknownXErrorMessage" xml:space="preserve">
|
||||
<value>Unknown {0} error occurred.</value>
|
||||
<value>Παρουσιάστηκε άγνωστο {0} σφάλμα.</value>
|
||||
</data>
|
||||
<data name="PlusAddressedEmailDescription" xml:space="preserve">
|
||||
<value>Use your email provider's subaddress capabilities</value>
|
||||
<value>Χρησιμοποιήστε τις δυνατότητες δευτερεύουσας διεύθυνσης του παρόχου email σας</value>
|
||||
</data>
|
||||
<data name="CatchAllEmailDescription" xml:space="preserve">
|
||||
<value>Use your domain's configured catch-all inbox.</value>
|
||||
<value>Χρησιμοποιήστε τα διαμορφωμένα εισερχόμενα catch-all του domain σας.</value>
|
||||
</data>
|
||||
<data name="ForwardedEmailDescription" xml:space="preserve">
|
||||
<value>Generate an email alias with an external forwarding service.</value>
|
||||
<value>Δημιουργήστε ένα ψευδώνυμο email με μια εξωτερική υπηρεσία προώθησης.</value>
|
||||
</data>
|
||||
<data name="Random" xml:space="preserve">
|
||||
<value>Random</value>
|
||||
<value>Τυχαίο</value>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -296,7 +296,7 @@
|
||||
<comment>Text to define that there are more options things to see.</comment>
|
||||
</data>
|
||||
<data name="MyVault" xml:space="preserve">
|
||||
<value>Nire Kutxa Gotorra</value>
|
||||
<value>Kutxa Gotorra</value>
|
||||
<comment>The title for the vault page.</comment>
|
||||
</data>
|
||||
<data name="Authenticator" xml:space="preserve">
|
||||
@@ -371,7 +371,7 @@
|
||||
<comment>Label for a username.</comment>
|
||||
</data>
|
||||
<data name="ValidationFieldRequired" xml:space="preserve">
|
||||
<value>{0} eremua ezinbestekoa da.</value>
|
||||
<value>{0} ezinbestekoa da.</value>
|
||||
<comment>Validation message for when a form field is left blank and is required to be entered.</comment>
|
||||
</data>
|
||||
<data name="ValueHasBeenCopied" xml:space="preserve">
|
||||
@@ -1016,7 +1016,7 @@
|
||||
<value>Saio-hasiera</value>
|
||||
</data>
|
||||
<data name="TypeSecureNote" xml:space="preserve">
|
||||
<value>Ohar segurua</value>
|
||||
<value>Ohar seguruak</value>
|
||||
</data>
|
||||
<data name="Address1" xml:space="preserve">
|
||||
<value>1go helbidea</value>
|
||||
@@ -1151,7 +1151,7 @@
|
||||
<value>Kutxa gotorra blokeatuta dago</value>
|
||||
</data>
|
||||
<data name="GoToMyVault" xml:space="preserve">
|
||||
<value>Joan nire kutxa gotorrera</value>
|
||||
<value>Joan kutxa gotorrera</value>
|
||||
</data>
|
||||
<data name="Collections" xml:space="preserve">
|
||||
<value>Bildumak</value>
|
||||
@@ -1952,7 +1952,7 @@
|
||||
<value>Pasahitz berria</value>
|
||||
</data>
|
||||
<data name="PasswordInfo" xml:space="preserve">
|
||||
<value>Nahi izanez gero, pasahitza eskatu erabiltzaileak bidalketa honetara sar daitezen.</value>
|
||||
<value>Nahi izanez gero, pasahitza eskatu erabiltzaileak Send honetara sar daitezen.</value>
|
||||
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
|
||||
</data>
|
||||
<data name="RemovePassword" xml:space="preserve">
|
||||
|
||||
@@ -705,7 +705,7 @@
|
||||
<comment>What Apple calls their fingerprint reader.</comment>
|
||||
</data>
|
||||
<data name="TwoStepLogin" xml:space="preserve">
|
||||
<value>Identification à double facteurs</value>
|
||||
<value>Identification en deux étapes</value>
|
||||
</data>
|
||||
<data name="TwoStepLoginConfirmation" xml:space="preserve">
|
||||
<value>L'authentification en deux étapes sécurise davantage votre compte en exigeant que chaque connexion soit confirmée par un autre dispositif tel qu'une clé de sécurité, une application d'authentification, un SMS, un appel téléphonique ou un courriel. Cette option peut être activée depuis le coffre web sur bitwarden.com. Voulez-vous y accéder maintenant ?</value>
|
||||
@@ -727,7 +727,7 @@
|
||||
<value>Afficher l'élément</value>
|
||||
</data>
|
||||
<data name="WebVault" xml:space="preserve">
|
||||
<value>Coffre web bitwarden</value>
|
||||
<value>Coffre web Bitwarden</value>
|
||||
</data>
|
||||
<data name="Lost2FAApp" xml:space="preserve">
|
||||
<value>Application d'authentification perdue ?</value>
|
||||
@@ -1170,7 +1170,7 @@ La numérisation se fera automatiquement.</value>
|
||||
<value>Service d'accessibilité pour le remplissage automatique</value>
|
||||
</data>
|
||||
<data name="AutofillServiceDescription" xml:space="preserve">
|
||||
<value>Le service de saisie automatique de Bitwarden utilise l'outil de saisie automatique d'Android pour aider à saisir les identifiants, les cartes de crédit et les informations d'identité dans d'autres applis sur votre appareil.</value>
|
||||
<value>Le service de remplissage automatique de Bitwarden utilise l'outil de remplissage automatique d'Android pour aider à saisir les identifiants, les cartes de crédit et les informations d'identité dans d'autres applications sur votre appareil.</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
|
||||
<value>Utilisez le service de remplissage automatique de Bitwarden pour remplir les informations de connexion dans d'autres applications.</value>
|
||||
@@ -1307,7 +1307,7 @@ La numérisation se fera automatiquement.</value>
|
||||
<value>1. Allez dans l'application "Réglages" d'iOS</value>
|
||||
</data>
|
||||
<data name="AutofillTurnOn2" xml:space="preserve">
|
||||
<value>2. Appuyez sur "Mots de passes et comptes"</value>
|
||||
<value>2. Appuyez sur "Mots de passe et comptes"</value>
|
||||
</data>
|
||||
<data name="AutofillTurnOn3" xml:space="preserve">
|
||||
<value>3. Appuyez sur "Préremplir mots de passe"</value>
|
||||
@@ -2323,7 +2323,7 @@ sélectionnez Ajouter TOTP pour stocker la clé en toute sécurité</value>
|
||||
<value>Type de Nom d'Utilisateur</value>
|
||||
</data>
|
||||
<data name="PlusAddressedEmail" xml:space="preserve">
|
||||
<value>Plus Addressed Email</value>
|
||||
<value>Email prenant en charge le "plus-addressing"</value>
|
||||
</data>
|
||||
<data name="CatchAllEmail" xml:space="preserve">
|
||||
<value>Collecteur d'e-mail</value>
|
||||
@@ -2362,7 +2362,7 @@ sélectionnez Ajouter TOTP pour stocker la clé en toute sécurité</value>
|
||||
<value>Jeton d'accès API</value>
|
||||
</data>
|
||||
<data name="AreYouSureYouWantToOverwriteTheCurrentUsername" xml:space="preserve">
|
||||
<value>Are you sure you want to overwrite the current username?</value>
|
||||
<value>Êtes-vous sûr(e) de vouloir remplacer le nom d'utilisateur actuel ?</value>
|
||||
</data>
|
||||
<data name="GenerateUsername" xml:space="preserve">
|
||||
<value>Générer un nom d'utilisateur</value>
|
||||
@@ -2377,10 +2377,10 @@ sélectionnez Ajouter TOTP pour stocker la clé en toute sécurité</value>
|
||||
<value>L'erreur {0} inconnue est survenue.</value>
|
||||
</data>
|
||||
<data name="PlusAddressedEmailDescription" xml:space="preserve">
|
||||
<value>Use your email provider's subaddress capabilities</value>
|
||||
<value>Utilisez les capacités de sous-adressage de votre fournisseur de messagerie</value>
|
||||
</data>
|
||||
<data name="CatchAllEmailDescription" xml:space="preserve">
|
||||
<value>Use your domain's configured catch-all inbox.</value>
|
||||
<value>Utilisez la boîte de réception de votre email collecteur/attrape-tout (catch-all).</value>
|
||||
</data>
|
||||
<data name="ForwardedEmailDescription" xml:space="preserve">
|
||||
<value>Générer un alias d'email avec un service de transfert externe.</value>
|
||||
|
||||
@@ -819,11 +819,11 @@
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="EnterVerificationCodeApp" xml:space="preserve">
|
||||
<value>Ievadi 6 ciparu apstiprinājuma kodu no autentificētāja lietotnes!</value>
|
||||
<value>Jāievada 6 ciparu apstiprinājuma kods no autentificētāja lietotnes.</value>
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="EnterVerificationCodeEmail" xml:space="preserve">
|
||||
<value>Ievadi 6 ciparu apstiprinājuma kodu, kas tika nosūtīts uz $EMAIL$!</value>
|
||||
<value>Jāievada 6 ciparu apstiprinājuma kods, kas tika nosūtīts uz {0}.</value>
|
||||
<comment>For 2FA</comment>
|
||||
</data>
|
||||
<data name="LoginUnavailable" xml:space="preserve">
|
||||
|
||||
@@ -2386,6 +2386,6 @@ wybierz Dodaj TOTP, aby bezpiecznie przechowywać klucz</value>
|
||||
<value>Wygeneruj alias adresu e-mail z zewnętrznej usługi przekazywania.</value>
|
||||
</data>
|
||||
<data name="Random" xml:space="preserve">
|
||||
<value>Losowa</value>
|
||||
<value>Losowy</value>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -2324,13 +2324,13 @@ selecione Adicionar TOTP para armazenar a chave de forma segura</value>
|
||||
<value>Tipo de Nome de Usuário</value>
|
||||
</data>
|
||||
<data name="PlusAddressedEmail" xml:space="preserve">
|
||||
<value>Plus Addressed Email</value>
|
||||
<value>E-mail endereçado mais</value>
|
||||
</data>
|
||||
<data name="CatchAllEmail" xml:space="preserve">
|
||||
<value>Catch-all Email</value>
|
||||
<value>E-mail pega-tudo</value>
|
||||
</data>
|
||||
<data name="ForwardedEmailAlias" xml:space="preserve">
|
||||
<value>Forwarded Email Alias</value>
|
||||
<value>Alias de E-mail Encaminhado</value>
|
||||
</data>
|
||||
<data name="RandomWord" xml:space="preserve">
|
||||
<value>Palavra Aleatória</value>
|
||||
@@ -2342,7 +2342,7 @@ selecione Adicionar TOTP para armazenar a chave de forma segura</value>
|
||||
<value>Nome do Domínio (obrigatório)</value>
|
||||
</data>
|
||||
<data name="APIKeyRequiredParenthesis" xml:space="preserve">
|
||||
<value>API Key (required)</value>
|
||||
<value>Chave de API (obrigatória)</value>
|
||||
</data>
|
||||
<data name="Service" xml:space="preserve">
|
||||
<value>Serviço</value>
|
||||
@@ -2375,16 +2375,16 @@ selecione Adicionar TOTP para armazenar a chave de forma segura</value>
|
||||
<value>Website (obrigatório)</value>
|
||||
</data>
|
||||
<data name="UnknownXErrorMessage" xml:space="preserve">
|
||||
<value>Unknown {0} error occurred.</value>
|
||||
<value>Ocorreu um erro desconhecido {0}.</value>
|
||||
</data>
|
||||
<data name="PlusAddressedEmailDescription" xml:space="preserve">
|
||||
<value>Use your email provider's subaddress capabilities</value>
|
||||
<value>Use os recursos de subendereço do seu provedor de e-mail</value>
|
||||
</data>
|
||||
<data name="CatchAllEmailDescription" xml:space="preserve">
|
||||
<value>Use your domain's configured catch-all inbox.</value>
|
||||
<value>Use a caixa de entrada "pega-tudo" configurada do seu domínio.</value>
|
||||
</data>
|
||||
<data name="ForwardedEmailDescription" xml:space="preserve">
|
||||
<value>Generate an email alias with an external forwarding service.</value>
|
||||
<value>Gere um alias de e-mail com um serviço de encaminhamento externo.</value>
|
||||
</data>
|
||||
<data name="Random" xml:space="preserve">
|
||||
<value>Aleatória</value>
|
||||
|
||||
@@ -222,7 +222,7 @@
|
||||
<value>文件夹已删除。</value>
|
||||
</data>
|
||||
<data name="FolderNone" xml:space="preserve">
|
||||
<value>默认文件夹</value>
|
||||
<value>无文件夹</value>
|
||||
<comment>Items that have no folder specified go in this special "catch-all" folder.</comment>
|
||||
</data>
|
||||
<data name="Folders" xml:space="preserve">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<TargetFramework>netstandard2.1</TargetFramework>
|
||||
<RootNamespace>Bit.Core</RootNamespace>
|
||||
<AssemblyName>BitwardenCore</AssemblyName>
|
||||
<Configurations>Debug;Release;FDroid</Configurations>
|
||||
@@ -26,12 +26,12 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CsvHelper" Version="27.1.1" />
|
||||
<PackageReference Include="LiteDB" Version="5.0.11" />
|
||||
<PackageReference Include="CsvHelper" Version="28.0.1" />
|
||||
<PackageReference Include="LiteDB" Version="5.0.12" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
<PackageReference Include="PCLCrypto" Version="2.0.147" />
|
||||
<PackageReference Include="zxcvbn-core" Version="7.0.92" />
|
||||
<PackageReference Include="Microsoft.AppCenter.Crashes" Version="4.4.0" />
|
||||
<PackageReference Include="Microsoft.AppCenter.Crashes" Version="4.5.3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.8bit.bitwarden.autofill</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2022.8.1</string>
|
||||
<string>2022.9.2</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>CFBundleLocalizations</key>
|
||||
|
||||
@@ -266,7 +266,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AppCenter.Crashes">
|
||||
<Version>4.4.0</Version>
|
||||
<Version>4.5.3</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.8bit.bitwarden.find-login-action-extension</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2022.8.1</string>
|
||||
<string>2022.9.2</string>
|
||||
<key>CFBundleLocalizations</key>
|
||||
<array>
|
||||
<string>en</string>
|
||||
|
||||
@@ -242,7 +242,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AppCenter.Crashes">
|
||||
<Version>4.4.0</Version>
|
||||
<Version>4.5.3</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.AppExtension.CSharp.targets" />
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2022.8.1</string>
|
||||
<string>2022.9.2</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>MinimumOSVersion</key>
|
||||
|
||||
@@ -166,9 +166,9 @@
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2478" />
|
||||
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2515" />
|
||||
<PackageReference Include="Microsoft.AppCenter.Crashes">
|
||||
<Version>4.4.0</Version>
|
||||
<Version>4.5.3</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.8bit.bitwarden</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2022.8.1</string>
|
||||
<string>2022.9.2</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>CFBundleIconName</key>
|
||||
|
||||
@@ -122,46 +122,46 @@
|
||||
<comment>Max 30 characters</comment>
|
||||
</data>
|
||||
<data name="Description" xml:space="preserve">
|
||||
<value>Bitwarden, Inc. is the parent company of 8bit Solutions LLC.
|
||||
<value>Bitwarden, Inc. - гэта мацярынская кампанія 8bit Solutions LLC.
|
||||
|
||||
NAMED BEST PASSWORD MANAGER BY THE VERGE, U.S. NEWS & WORLD REPORT, CNET, AND MORE.
|
||||
НАЗВАНЫ ЛЕПШЫМ МЕНЕДЖАРАМ ПАРОЛЯЎ VERGE, U.S. NEWS & WORLD REPORT, CNET І ІНШЫМІ АРГАНІЗАЦЫЯМІ.
|
||||
|
||||
Manage, store, secure, and share unlimited passwords across unlimited devices from anywhere. Bitwarden delivers open source password management solutions to everyone, whether at home, at work, or on the go.
|
||||
Кіруйце, захоўвайце, абараняйце і дзяліцеся неабмежаванай колькасцю пароляў на неабмежаванай колькасці прылад з любога месца. Bitwarden прапануе праграмныя рашэнні менеджара пароляў з адкрытым зыходным кодам для кожнага, калі вы на працы, дома або падарожнічаеце.
|
||||
|
||||
Generate strong, unique, and random passwords based on security requirements for every website you frequent.
|
||||
Генерыруйце надзейныя, унікальныя і выпадковыя паролі на падставе патрабаванняў бяспекі для кожнага вэб-сайта, які вы наведваеце.
|
||||
|
||||
Bitwarden Send quickly transmits encrypted information --- files and plaintext -- directly to anyone.
|
||||
Функцыя Send ад Bitwarden дазваляе хутка перадаць інфармацыю (файлы і нефарматаваны тэкст) у зашыфраваным выглядзе любому карыстальніку.
|
||||
|
||||
Bitwarden offers Teams and Enterprise plans for companies so you can securely share passwords with colleagues.
|
||||
Bitwarden прапануе для кампаній тарыфныя планы Teams і Enterprise, каб вы маглі абменьвацца паролямі з вашымі калегамі.
|
||||
|
||||
Why Choose Bitwarden:
|
||||
Чаму варта выбраць менавіта Bitwarden:
|
||||
|
||||
World-Class Encryption
|
||||
Passwords are protected with advanced end-to-end encryption (AES-256 bit, salted hashtag, and PBKDF2 SHA-256) so your data stays secure and private.
|
||||
Шыфраванне сусветнага класа
|
||||
Паролі абаронены прасунутым скразным шыфраваннем (AES-256 bit, salted hashtag і PBKDF2 SHA-256). Такім чынам, вашы паролі заўсёды будуць у бяспецы.
|
||||
|
||||
Built-in Password Generator
|
||||
Generate strong, unique, and random passwords based on security requirements for every website you frequent.
|
||||
Убудаваны генератар пароляў
|
||||
Генерыруйце надзейныя, унікальныя і выпадковыя паролі на падставе патрабаванняў бяспекі для кожнага вэб-сайта, які вы наведваеце.
|
||||
|
||||
Global Translations
|
||||
Bitwarden translations exist in 40 languages and are growing, thanks to our global community.
|
||||
Шматмоўная падтрымка
|
||||
Bitwarden перакладзены на 40 моў свету (прысутнічае беларуская) і іх колькасць працягвае расці дзякуючы нашай глабальнай супольнасці.
|
||||
|
||||
Cross-Platform Applications
|
||||
Secure and share sensitive data within your Bitwarden Vault from any browser, mobile device, or desktop OS, and more.
|
||||
Кросплатформенныя праграмы
|
||||
Абараняйце і дзяліцеся канфідэнцыяльнымі данымі ў вашым сховішчы Bitwarden з любога браўзера, мабільнай прылады або аперацыйнай сістэмы для камп'ютара.
|
||||
</value>
|
||||
<comment>Max 4000 characters</comment>
|
||||
</data>
|
||||
<data name="Keywords" xml:space="preserve">
|
||||
<value>bit warden,8bit,пароль,бясплатны менеджэр паролей,менеджэр паролей,менеджэр лагінаў</value>
|
||||
<value>bit warden,8bit,пароль,бясплатны менеджар пароляў,менеджар пароляў,менеджар лагінаў</value>
|
||||
<comment>Max 100 characters</comment>
|
||||
</data>
|
||||
<data name="Screenshot1" xml:space="preserve">
|
||||
<value>Кіруйце ўсімі вашымі імёнамі карыстальніка і паролямі з бяспечнага сховішча</value>
|
||||
<value>Кіруйце ўсімі вашымі лагінамі і паролямі з бяспечнага сховішча</value>
|
||||
</data>
|
||||
<data name="Screenshot2" xml:space="preserve">
|
||||
<value>Аўтаматычна генерыруйце моцныя, выпадковыя і бяспечныя паролі</value>
|
||||
<value>Аўтаматычна генерыруйце надзейныя, выпадковыя і бяспечныя паролі</value>
|
||||
</data>
|
||||
<data name="Screenshot3" xml:space="preserve">
|
||||
<value>Абараніце ваша сховішча з дапамогай Touch ID, PIN-кода ці асноўнага пароля.</value>
|
||||
<value>Абараніце ваша сховішча з дапамогай Touch ID, PIN-кода або асноўнага пароля</value>
|
||||
</data>
|
||||
<data name="Screenshot4" xml:space="preserve">
|
||||
<value>Аўтазапаўненне падтрымлівае Safari, Chrome і сотні другіх праграм</value>
|
||||
|
||||
@@ -122,31 +122,31 @@
|
||||
<comment>Max 30 characters</comment>
|
||||
</data>
|
||||
<data name="Description" xml:space="preserve">
|
||||
<value>Bitwarden, Inc. is the parent company of 8bit Solutions LLC.
|
||||
<value>Η Bitwarden, Inc. είναι η μητρική εταιρεία της 8bit Solutions LLC.
|
||||
|
||||
NAMED BEST PASSWORD MANAGER BY THE VERGE, U.S. NEWS & WORLD REPORT, CNET, AND MORE.
|
||||
ΑΠΟΚΑΛΕΙΤΑΙ ΩΣ Ο ΚΑΛΎΤΕΡΟΣ ΔΙΑΧΕΙΡΙΣΤΉΣ ΚΩΔΙΚΩΝ ΑΠΟ ΤΑ VERGE, U.S. NEWS & WORLD REPORT, CNET ΚΑΙ ΑΛΛΑ.
|
||||
|
||||
Manage, store, secure, and share unlimited passwords across unlimited devices from anywhere. Bitwarden delivers open source password management solutions to everyone, whether at home, at work, or on the go.
|
||||
Διαχειριστείτε, αποθηκεύστε, ασφαλίστε και κοινοποιήστε απεριόριστους κωδικούς μεταξύ απεριόριστων συσκευών από οπουδήποτε. Το Bitwarden παρέχει λύση ανοιχτού κώδικα διαχείρισης κωδικών σε όλους, είτε είστε σπίτι είτε στην εργασία είτε εν κινησει.
|
||||
|
||||
Generate strong, unique, and random passwords based on security requirements for every website you frequent.
|
||||
Δημιουργήστε ισχυρούς, μοναδικούς και τυχαίους κωδικούς βασισμένους σε απαιτήσεις ασφαλείας για κάθε ιστοσελίδα που επισκέπτεστε συχνά.
|
||||
|
||||
Bitwarden Send quickly transmits encrypted information --- files and plaintext -- directly to anyone.
|
||||
Το Bitwarden Send μεταδίδει γρήγορα κρυπτογραφημένες πληροφορίες --- αρχεία και απλό κείμενο -- απευθείας σε όλους.
|
||||
|
||||
Bitwarden offers Teams and Enterprise plans for companies so you can securely share passwords with colleagues.
|
||||
Το Bitwarden προσφέρει πλάνα για Ομάδες και Οργανισμούς για εταιρείες ώστε να μοιράζεστε με ασφάλεια κωδικούς με τους συναδέλφους σας.
|
||||
|
||||
Why Choose Bitwarden:
|
||||
Γιατί να επιλέξετε το Bitwarden:
|
||||
|
||||
World-Class Encryption
|
||||
Passwords are protected with advanced end-to-end encryption (AES-256 bit, salted hashtag, and PBKDF2 SHA-256) so your data stays secure and private.
|
||||
Κρυπτογράφηση Παγκόσμιου Επιπέδου
|
||||
Οι κωδικοί προστατεύονται με προηγμένη κρυπτογράφηση από άκρη σε άκρη (AES-256 bit, salted hashtag, και PBKDF2 SHA-256) ώστε τα δεδομένα σας να παραμένουν ασφαλή και ιδιωτικά.
|
||||
|
||||
Built-in Password Generator
|
||||
Generate strong, unique, and random passwords based on security requirements for every website you frequent.
|
||||
Ενσωματωμένη Γεννήτρια Κωδικών
|
||||
Δημιουργήστε ισχυρούς, μοναδικούς και τυχαίους κωδικούς βασισμένους σε απαιτήσεις ασφαλείας για κάθε ιστοσελίδα που επισκέπτεστε συχνά.
|
||||
|
||||
Global Translations
|
||||
Bitwarden translations exist in 40 languages and are growing, thanks to our global community.
|
||||
Παγκοσμίως Μεταφρασμένο
|
||||
Το Bitwarden έχει μεταφραστεί σε 40 γλώσσες και αυξάνονται, χάρη στη παγκόσμια κοινότητα μας.
|
||||
|
||||
Cross-Platform Applications
|
||||
Secure and share sensitive data within your Bitwarden Vault from any browser, mobile device, or desktop OS, and more.
|
||||
Εφαρμογές Σε Κάθε Πλατφόρμα
|
||||
Ασφαλίστε και κοινοποιήστε ευαίσθητα δεδομένα μέσα από το Bitwarden Vault από κάθε φυλλομετρητή, κινητή συσκευή ή υπολογιστή και αλλα.
|
||||
</value>
|
||||
<comment>Max 4000 characters</comment>
|
||||
</data>
|
||||
|
||||
@@ -126,31 +126,32 @@
|
||||
<comment>Max 80 characters</comment>
|
||||
</data>
|
||||
<data name="FullDesciption" xml:space="preserve">
|
||||
<value>Bitwarden, Inc. is the parent company of 8bit Solutions LLC.
|
||||
<value>شركة Bitwarden, Inc هي الشركة الأم لشركة 8bit Solutions LLC.
|
||||
|
||||
NAMED BEST PASSWORD MANAGER BY THE VERGE, U.S. NEWS & WORLD REPORT, CNET, AND MORE.
|
||||
تم تصنيف Bitwarden كأفصل مدير كلمات مرور بواسطة كل من The Verge، U.S News & World Report، CNET، وغيرهم.
|
||||
|
||||
Manage, store, secure, and share unlimited passwords across unlimited devices from anywhere. Bitwarden delivers open source password management solutions to everyone, whether at home, at work, or on the go.
|
||||
قم بإدارة وحفظ وتأمين كلمات المرور الخاصة بك، ومشاركتها بين أجهزتك من أي مكان.
|
||||
يوفر Bitwarden حل مفتوح المصدر لإدارة كلمات المرور للجميع، سواء في المنزل، في العمل أو في أي مكان.
|
||||
|
||||
Generate strong, unique, and random passwords based on security requirements for every website you frequent.
|
||||
قم بإنشاء كلمات مرور قوية وفريدة وعشوائية حسب متطلبات الأمان للصفحات التي تزورها.
|
||||
|
||||
Bitwarden Send quickly transmits encrypted information --- files and plaintext -- directly to anyone.
|
||||
يوفر Bitwarden Send إمكانية إرسال البيانات --- النصوص والملفات --- بطريقة مشفرة وسريعة لأي شخص.
|
||||
|
||||
Bitwarden offers Teams and Enterprise plans for companies so you can securely share passwords with colleagues.
|
||||
يوفر Bitwarden خطط خاصة للفرق والشركات والمؤسسات لتمكنك من مشاركة كلمات المرور مع زملائك في العمل.
|
||||
|
||||
Why Choose Bitwarden:
|
||||
لماذا قد تختار Bitwarden:
|
||||
|
||||
World-Class Encryption
|
||||
Passwords are protected with advanced end-to-end encryption (AES-256 bit, salted hashtag, and PBKDF2 SHA-256) so your data stays secure and private.
|
||||
تشفير على مستوى عالمي
|
||||
كلمات المرور محمية بتشفير متقدم تام (end-to-end encryption) من نوعية AES-256 bit، مع salted hashing، و PBKDF2 SHA-256. كل هذا لإبقاء بياناتك محمية وخاصة.
|
||||
|
||||
Built-in Password Generator
|
||||
Generate strong, unique, and random passwords based on security requirements for every website you frequent.
|
||||
مولد كلمات المرور المدمج
|
||||
قم بإنشاء كلمات مرور قوية وفريدة وعشوائية حسب متطلبات الأمان للصفحات التي تزورها.
|
||||
|
||||
Global Translations
|
||||
Bitwarden translations exist in 40 languages and are growing, thanks to our global community.
|
||||
الترجمات العالمية
|
||||
يتوفر Bitwarden بأكثر من 40 لغة، وتتنامى الترجمات بفضل مجتمعنا العالمي.
|
||||
|
||||
Cross-Platform Applications
|
||||
Secure and share sensitive data within your Bitwarden Vault from any browser, mobile device, or desktop OS, and more.
|
||||
تطبيقات متعددة المنصات
|
||||
قم بحماية ومشاركة بياناتك الحساسة عبر خزنة Bitwarden من أي متصفح ويب، أو هاتف ذكي، أو جهاز كمبيوتر، وغيرها.
|
||||
</value>
|
||||
<comment>Max 4000 characters</comment>
|
||||
</data>
|
||||
|
||||
@@ -122,35 +122,35 @@
|
||||
<comment>Max 30 characters</comment>
|
||||
</data>
|
||||
<data name="ShortDescription" xml:space="preserve">
|
||||
<value>Bitwarden — гэта менеджар імён карыстальніка і паролей, які дапамагае вам захаваць вашу бяспеку у анлайн-прасторы</value>
|
||||
<value>Bitwarden — гэта менеджар лагінаў і пароляў, які дапамагае вам захаваць бяспеку ў інтэрнэце.</value>
|
||||
<comment>Max 80 characters</comment>
|
||||
</data>
|
||||
<data name="FullDesciption" xml:space="preserve">
|
||||
<value>Bitwarden, Inc. is the parent company of 8bit Solutions LLC.
|
||||
<value>Bitwarden, Inc. - гэта мацярынская кампанія 8bit Solutions LLC.
|
||||
|
||||
NAMED BEST PASSWORD MANAGER BY THE VERGE, U.S. NEWS & WORLD REPORT, CNET, AND MORE.
|
||||
НАЗВАНЫ ЛЕПШЫМ МЕНЕДЖАРАМ ПАРОЛЯЎ VERGE, U.S. NEWS & WORLD REPORT, CNET І ІНШЫМІ АРГАНІЗАЦЫЯМІ.
|
||||
|
||||
Manage, store, secure, and share unlimited passwords across unlimited devices from anywhere. Bitwarden delivers open source password management solutions to everyone, whether at home, at work, or on the go.
|
||||
Кіруйце, захоўвайце, абараняйце і дзяліцеся неабмежаванай колькасцю пароляў на неабмежаванай колькасці прылад з любога месца. Bitwarden прапануе праграмныя рашэнні менеджара пароляў з адкрытым зыходным кодам для кожнага, калі вы на працы, дома або падарожнічаеце.
|
||||
|
||||
Generate strong, unique, and random passwords based on security requirements for every website you frequent.
|
||||
Генерыруйце надзейныя, унікальныя і выпадковыя паролі на падставе патрабаванняў бяспекі для кожнага вэб-сайта, які вы наведваеце.
|
||||
|
||||
Bitwarden Send quickly transmits encrypted information --- files and plaintext -- directly to anyone.
|
||||
Функцыя Send ад Bitwarden дазваляе хутка перадаць інфармацыю (файлы і нефарматаваны тэкст) у зашыфраваным выглядзе любому карыстальніку.
|
||||
|
||||
Bitwarden offers Teams and Enterprise plans for companies so you can securely share passwords with colleagues.
|
||||
Bitwarden прапануе для кампаній тарыфныя планы Teams і Enterprise, каб вы маглі абменьвацца паролямі з вашымі калегамі.
|
||||
|
||||
Why Choose Bitwarden:
|
||||
Чаму варта выбраць менавіта Bitwarden:
|
||||
|
||||
World-Class Encryption
|
||||
Passwords are protected with advanced end-to-end encryption (AES-256 bit, salted hashtag, and PBKDF2 SHA-256) so your data stays secure and private.
|
||||
Шыфраванне сусветнага класа
|
||||
Паролі абаронены прасунутым скразным шыфраваннем (AES-256 bit, salted hashtag і PBKDF2 SHA-256). Такім чынам, вашы паролі заўсёды будуць у бяспецы.
|
||||
|
||||
Built-in Password Generator
|
||||
Generate strong, unique, and random passwords based on security requirements for every website you frequent.
|
||||
Убудаваны генератар пароляў
|
||||
Генерыруйце надзейныя, унікальныя і выпадковыя паролі на падставе патрабаванняў бяспекі для кожнага вэб-сайта, які вы наведваеце.
|
||||
|
||||
Global Translations
|
||||
Bitwarden translations exist in 40 languages and are growing, thanks to our global community.
|
||||
Шматмоўная падтрымка
|
||||
Bitwarden перакладзены на 40 моў свету (прысутнічае беларуская) і іх колькасць працягвае расці дзякуючы нашай глабальнай супольнасці.
|
||||
|
||||
Cross-Platform Applications
|
||||
Secure and share sensitive data within your Bitwarden Vault from any browser, mobile device, or desktop OS, and more.
|
||||
Кросплатформенныя праграмы
|
||||
Абараняйце і дзяліцеся канфідэнцыяльнымі данымі ў вашым сховішчы Bitwarden з любога браўзера, мабільнай прылады або аперацыйнай сістэмы для камп'ютара.
|
||||
</value>
|
||||
<comment>Max 4000 characters</comment>
|
||||
</data>
|
||||
@@ -158,16 +158,16 @@ Secure and share sensitive data within your Bitwarden Vault from any browser, mo
|
||||
<value>Бяспечны і бясплатны менеджар пароляў для ўсіх вашых прылад</value>
|
||||
</data>
|
||||
<data name="Screenshot1" xml:space="preserve">
|
||||
<value>Кіруйце ўсімі вашымі імёнамі карыстальніка і паролямі з бяспечнага сховішча</value>
|
||||
<value>Кіруйце ўсімі вашымі лагінамі і паролямі з бяспечнага сховішча</value>
|
||||
</data>
|
||||
<data name="Screenshot2" xml:space="preserve">
|
||||
<value>Аўтаматычна генерыруйце моцныя, выпадковыя і бяспечныя паролі</value>
|
||||
<value>Аўтаматычна генерыруйце надзейныя, выпадковыя і бяспечныя паролі</value>
|
||||
</data>
|
||||
<data name="Screenshot3" xml:space="preserve">
|
||||
<value>Абараніце ваша сховішча з дапамогай вашага адбітка пальца, PIN-кода ці асноўнага пароля.</value>
|
||||
<value>Абараніце ваша сховішча з дапамогай адбітка вашага пальца, PIN-кода або асноўнага пароля</value>
|
||||
</data>
|
||||
<data name="Screenshot4" xml:space="preserve">
|
||||
<value>Хуткае аўтазапаўненне ўліковых даных з браузера або іншых праграм</value>
|
||||
<value>Хуткае аўтазапаўненне лагінаў у браўзеры і іншых праграмах</value>
|
||||
</data>
|
||||
<data name="Screenshot5" xml:space="preserve">
|
||||
<value>Сінхранізацыя і доступ да сховішча з некалькіх прылад
|
||||
|
||||
@@ -126,31 +126,31 @@
|
||||
<comment>Max 80 characters</comment>
|
||||
</data>
|
||||
<data name="FullDesciption" xml:space="preserve">
|
||||
<value>Bitwarden, Inc. is the parent company of 8bit Solutions LLC.
|
||||
<value>Η Bitwarden, Inc. είναι η μητρική εταιρεία της 8bit Solutions LLC.
|
||||
|
||||
NAMED BEST PASSWORD MANAGER BY THE VERGE, U.S. NEWS & WORLD REPORT, CNET, AND MORE.
|
||||
ΑΠΟΚΑΛΕΙΤΑΙ ΩΣ Ο ΚΑΛΎΤΕΡΟΣ ΔΙΑΧΕΙΡΙΣΤΉΣ ΚΩΔΙΚΩΝ ΑΠΟ ΤΑ VERGE, U.S. NEWS & WORLD REPORT, CNET ΚΑΙ ΑΛΛΑ.
|
||||
|
||||
Manage, store, secure, and share unlimited passwords across unlimited devices from anywhere. Bitwarden delivers open source password management solutions to everyone, whether at home, at work, or on the go.
|
||||
Διαχειριστείτε, αποθηκεύστε, ασφαλίστε και κοινοποιήστε απεριόριστους κωδικούς μεταξύ απεριόριστων συσκευών από οπουδήποτε. Το Bitwarden παρέχει λύση ανοιχτού κώδικα διαχείρισης κωδικών σε όλους, είτε είστε σπίτι είτε στην εργασία είτε εν κινησει.
|
||||
|
||||
Generate strong, unique, and random passwords based on security requirements for every website you frequent.
|
||||
Δημιουργήστε ισχυρούς, μοναδικούς και τυχαίους κωδικούς βασισμένους σε απαιτήσεις ασφαλείας για κάθε ιστοσελίδα που επισκέπτεστε συχνά.
|
||||
|
||||
Bitwarden Send quickly transmits encrypted information --- files and plaintext -- directly to anyone.
|
||||
Το Bitwarden Send μεταδίδει γρήγορα κρυπτογραφημένες πληροφορίες --- αρχεία και απλό κείμενο -- απευθείας σε όλους.
|
||||
|
||||
Bitwarden offers Teams and Enterprise plans for companies so you can securely share passwords with colleagues.
|
||||
Το Bitwarden προσφέρει πλάνα για Ομάδες και Οργανισμούς για εταιρείες ώστε να μοιράζεστε με ασφάλεια κωδικούς με τους συναδέλφους σας.
|
||||
|
||||
Why Choose Bitwarden:
|
||||
Γιατί να επιλέξετε το Bitwarden:
|
||||
|
||||
World-Class Encryption
|
||||
Passwords are protected with advanced end-to-end encryption (AES-256 bit, salted hashtag, and PBKDF2 SHA-256) so your data stays secure and private.
|
||||
Κρυπτογράφηση Παγκόσμιου Επιπέδου
|
||||
Οι κωδικοί προστατεύονται με προηγμένη κρυπτογράφηση από άκρη σε άκρη (AES-256 bit, salted hashtag, και PBKDF2 SHA-256) ώστε τα δεδομένα σας να παραμένουν ασφαλή και ιδιωτικά.
|
||||
|
||||
Built-in Password Generator
|
||||
Generate strong, unique, and random passwords based on security requirements for every website you frequent.
|
||||
Ενσωματωμένη Γεννήτρια Κωδικών
|
||||
Δημιουργήστε ισχυρούς, μοναδικούς και τυχαίους κωδικούς βασισμένους σε απαιτήσεις ασφαλείας για κάθε ιστοσελίδα που επισκέπτεστε συχνά.
|
||||
|
||||
Global Translations
|
||||
Bitwarden translations exist in 40 languages and are growing, thanks to our global community.
|
||||
Παγκοσμίως Μεταφρασμένο
|
||||
Το Bitwarden έχει μεταφραστεί σε 40 γλώσσες και αυξάνονται, χάρη στη παγκόσμια κοινότητα μας.
|
||||
|
||||
Cross-Platform Applications
|
||||
Secure and share sensitive data within your Bitwarden Vault from any browser, mobile device, or desktop OS, and more.
|
||||
Εφαρμογές Σε Κάθε Πλατφόρμα
|
||||
Ασφαλίστε και κοινοποιήστε ευαίσθητα δεδομένα μέσα από το Bitwarden Vault από κάθε φυλλομετρητή, κινητή συσκευή ή υπολογιστή και αλλα.
|
||||
</value>
|
||||
<comment>Max 4000 characters</comment>
|
||||
</data>
|
||||
|
||||
@@ -7,15 +7,15 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NSubstitute" Version="4.2.2" />
|
||||
<PackageReference Include="NSubstitute" Version="4.4.0" />
|
||||
<PackageReference Include="xunit" Version="2.4.1" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.2">
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="AutoFixture.Xunit2" Version="4.17.0" />
|
||||
<PackageReference Include="AutoFixture.AutoNSubstitute" Version="4.17.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.1" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
|
||||
<PackageReference Include="NSubstitute" Version="4.2.2" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.1" />
|
||||
<PackageReference Include="NSubstitute" Version="4.4.0" />
|
||||
<PackageReference Include="xunit" Version="2.4.1" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>netcoreapp2.0</TargetFramework>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
<AssemblyName>BitwardenPlayground</AssemblyName>
|
||||
<RootNamespace>Bit.Playground</RootNamespace>
|
||||
<Configurations>Debug;Release;FDroid</Configurations>
|
||||
|
||||
Reference in New Issue
Block a user