1
0
mirror of https://github.com/bitwarden/mobile synced 2025-12-16 08:13:20 +00:00

Compare commits

..

17 Commits

Author SHA1 Message Date
Kyle Spearrin
ea1b584436 fixes for mobile app uris 2017-09-15 08:12:24 -04:00
Kyle Spearrin
a24ede364d switch all monospaced fonts on iOS to menlo 2017-09-14 15:17:28 -04:00
Kyle Spearrin
c6fe456cac more terms to ignore from package names 2017-09-12 17:18:59 -04:00
Kyle Spearrin
4008fb3a53 search packagename terms on android autofill 2017-09-12 17:01:13 -04:00
Kyle Spearrin
96588089ef filter out "launcher" apps from autofill service 2017-09-12 15:54:08 -04:00
Kyle Spearrin
e4c96dc6d8 all editor to be scrollable 2017-09-12 15:41:18 -04:00
Kyle Spearrin
c205e0da1b add icon to hockeyapp activity modification 2017-09-12 14:57:19 -04:00
Kyle Spearrin
7b61605834 version bump 2017-09-12 10:13:00 -04:00
Kyle Spearrin
e7fb05d7e0 update info.plist language resource array 2017-09-12 10:11:30 -04:00
Kyle Spearrin
8f0680f5fc new language resource files 2017-09-12 10:08:32 -04:00
Kyle Spearrin
9c03dd001c New Crowdin translations (#129)
* New translations AppResources.resx (Romanian)

* New translations AppResources.resx (Russian)

* New translations AppResources.resx (Slovak)

* New translations AppResources.resx (Polish)

* New translations AppResources.resx (Portuguese)

* New translations AppResources.resx (Portuguese, Brazilian)

* New translations copy.resx (Turkish)

* New translations AppResources.resx (Turkish)

* New translations copy.resx (Turkish)

* New translations copy.resx (Turkish)

* New translations copy.resx (Ukrainian)

* New translations copy.resx (Ukrainian)

* New translations copy.resx (Ukrainian)

* New translations AppResources.resx (Ukrainian)

* New translations AppResources.resx (Thai)

* New translations copy.resx (Spanish)

* New translations AppResources.resx (Spanish)

* New translations AppResources.resx (Swedish)

* New translations AppResources.resx (Czech)

* New translations AppResources.resx (Dutch)

* New translations copy.resx (Dutch)

* New translations AppResources.resx (Finnish)

* New translations copy.resx (Dutch)

* New translations copy.resx (Dutch)

* New translations AppResources.resx (Chinese Traditional)

* New translations AppResources.resx (Croatian)

* New translations AppResources.resx (Indonesian)

* New translations copy.resx (Hungarian)

* New translations AppResources.resx (Italian)

* New translations AppResources.resx (Japanese)

* New translations copy.resx (Hungarian)

* New translations copy.resx (Hungarian)

* New translations AppResources.resx (French)

* New translations AppResources.resx (Hindi)

* New translations AppResources.resx (Hungarian)

* New translations AppResources.resx (Chinese Simplified)
2017-09-12 09:09:00 -04:00
Kyle Spearrin
30407f5b4e handle iOS apps that don't specify a url properly 2017-09-09 13:41:10 -04:00
Kyle Spearrin
3a5378d201 do not attempt autofill on android 4.4 2017-09-08 09:16:21 -04:00
Kyle Spearrin
d4f3577f5e use latest VS image 2017-09-07 00:34:51 -04:00
Kyle Spearrin
408e9bf3fc conditionals if device has camera or not 2017-09-07 00:33:19 -04:00
Kyle Spearrin
f5dd91afe5 parse IP addresses as base domains 2017-09-06 23:08:24 -04:00
Kyle Spearrin
8922459418 mark hockeyapp UpdateActivity as exported=false 2017-09-04 23:34:30 -04:00
69 changed files with 6506 additions and 186 deletions

View File

@@ -15,4 +15,4 @@ artifacts:
branches: branches:
except: except:
- l10n_master - l10n_master
image: Previous Visual Studio 2017 image: Visual Studio 2017

View File

@@ -70,7 +70,11 @@ namespace Bit.Android
public override void OnAccessibilityEvent(AccessibilityEvent e) public override void OnAccessibilityEvent(AccessibilityEvent e)
{ {
var powerManager = (PowerManager)GetSystemService(PowerService); var powerManager = (PowerManager)GetSystemService(PowerService);
if(!powerManager.IsInteractive) if(Build.VERSION.SdkInt > BuildVersionCodes.KitkatWatch && !powerManager.IsInteractive)
{
return;
}
else if(Build.VERSION.SdkInt < BuildVersionCodes.Lollipop && !powerManager.IsScreenOn)
{ {
return; return;
} }
@@ -79,7 +83,8 @@ namespace Bit.Android
{ {
var root = RootInActiveWindow; var root = RootInActiveWindow;
if(e == null || root == null || string.IsNullOrWhiteSpace(e.PackageName) || if(e == null || root == null || string.IsNullOrWhiteSpace(e.PackageName) ||
e.PackageName == SystemUiPackage || root.PackageName != e.PackageName) e.PackageName == SystemUiPackage || e.PackageName.Contains("launcher") ||
root.PackageName != e.PackageName)
{ {
return; return;
} }
@@ -337,11 +342,15 @@ namespace Bit.Android
intent.SetFlags(ActivityFlags.NewTask | ActivityFlags.SingleTop | ActivityFlags.ClearTop); intent.SetFlags(ActivityFlags.NewTask | ActivityFlags.SingleTop | ActivityFlags.ClearTop);
var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.UpdateCurrent); var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.UpdateCurrent);
var notificationContent = Build.VERSION.SdkInt > BuildVersionCodes.KitkatWatch ?
App.Resources.AppResources.BitwardenAutofillServiceNotificationContent :
App.Resources.AppResources.BitwardenAutofillServiceNotificationContentOld;
var builder = new Notification.Builder(this); var builder = new Notification.Builder(this);
builder.SetSmallIcon(Resource.Drawable.notification_sm) builder.SetSmallIcon(Resource.Drawable.notification_sm)
.SetContentTitle(App.Resources.AppResources.BitwardenAutofillService) .SetContentTitle(App.Resources.AppResources.BitwardenAutofillService)
.SetContentText(App.Resources.AppResources.BitwardenAutofillServiceNotificationContent) .SetContentText(notificationContent)
.SetTicker(App.Resources.AppResources.BitwardenAutofillServiceNotificationContent) .SetTicker(notificationContent)
.SetWhen(now) .SetWhen(now)
.SetContentIntent(pendingIntent); .SetContentIntent(pendingIntent);

View File

@@ -4,6 +4,8 @@ using Bit.Android.Controls;
using Bit.App.Controls; using Bit.App.Controls;
using Xamarin.Forms; using Xamarin.Forms;
using Xamarin.Forms.Platform.Android; using Xamarin.Forms.Platform.Android;
using Android.Text.Method;
using Android.Views;
[assembly: ExportRenderer(typeof(ExtendedEditor), typeof(ExtendedEditorRenderer))] [assembly: ExportRenderer(typeof(ExtendedEditor), typeof(ExtendedEditorRenderer))]
namespace Bit.Android.Controls namespace Bit.Android.Controls
@@ -17,6 +19,7 @@ namespace Bit.Android.Controls
var view = (ExtendedEditor)Element; var view = (ExtendedEditor)Element;
SetBorder(view); SetBorder(view);
SetScrollable();
} }
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
@@ -44,5 +47,36 @@ namespace Bit.Android.Controls
Control.SetBackgroundColor(global::Android.Graphics.Color.Transparent); Control.SetBackgroundColor(global::Android.Graphics.Color.Transparent);
} }
} }
private void SetScrollable()
{
// While scrolling inside Editor stop scrolling parent view.
Control.OverScrollMode = OverScrollMode.Always;
Control.ScrollBarStyle = ScrollbarStyles.InsideInset;
Control.SetOnTouchListener(new EditorTouchListener());
// For Scrolling in Editor innner area
Control.VerticalScrollBarEnabled = true;
Control.MovementMethod = ScrollingMovementMethod.Instance;
Control.ScrollBarStyle = ScrollbarStyles.InsideInset;
// Force scrollbars to be displayed
var arr = Control.Context.Theme.ObtainStyledAttributes(new int[0]);
InitializeScrollbars(arr);
arr.Recycle();
}
public class EditorTouchListener : Java.Lang.Object, IOnTouchListener
{
public bool OnTouch(global::Android.Views.View v, MotionEvent e)
{
v.Parent?.RequestDisallowInterceptTouchEvent(true);
if((e.Action & MotionEventActions.Up) != 0 && (e.ActionMasked & MotionEventActions.Up) != 0)
{
v.Parent?.RequestDisallowInterceptTouchEvent(false);
}
return false;
}
}
} }
} }

View File

@@ -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" package="com.x8bit.bitwarden" android:versionName="1.9.0" android:installLocation="auto" android:versionCode="502" xmlns:tools="http://schemas.android.com/tools"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.x8bit.bitwarden" android:versionName="1.10.0" android:installLocation="auto" android:versionCode="502" xmlns:tools="http://schemas.android.com/tools">
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" /> <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
@@ -13,6 +13,9 @@
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.x8bit.bitwarden.permission.C2D_MESSAGE" /> <uses-permission android:name="com.x8bit.bitwarden.permission.C2D_MESSAGE" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<application android:label="bitwarden" android:theme="@style/BitwardenTheme" android:allowBackup="false"> <application android:label="bitwarden" android:theme="@style/BitwardenTheme" android:allowBackup="false">
<provider <provider
android:name="android.support.v4.content.FileProvider" android:name="android.support.v4.content.FileProvider"
@@ -23,5 +26,7 @@
android:name="android.support.FILE_PROVIDER_PATHS" android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" /> android:resource="@xml/filepaths" />
</provider> </provider>
<activity android:name="net.hockeyapp.android.UpdateActivity" android:exported="false" android:icon="@drawable/icon" />
</application> </application>
</manifest> </manifest>

View File

@@ -139,45 +139,47 @@ namespace Bit.Android.Services
MessagingCenter.Unsubscribe<Application>(Application.Current, "SelectFileCameraPermissionDenied"); MessagingCenter.Unsubscribe<Application>(Application.Current, "SelectFileCameraPermissionDenied");
var hasStorageWritePermission = !_cameraPermissionsDenied && HasPermission(Manifest.Permission.WriteExternalStorage); var hasStorageWritePermission = !_cameraPermissionsDenied && HasPermission(Manifest.Permission.WriteExternalStorage);
var hasCameraPermission = !_cameraPermissionsDenied && HasPermission(Manifest.Permission.Camera);
if(!_cameraPermissionsDenied && !hasStorageWritePermission)
{
AskCameraPermission(Manifest.Permission.WriteExternalStorage);
return Task.FromResult(0);
}
if(!_cameraPermissionsDenied && !hasCameraPermission)
{
AskCameraPermission(Manifest.Permission.Camera);
return Task.FromResult(0);
}
var additionalIntents = new List<IParcelable>(); var additionalIntents = new List<IParcelable>();
if(Forms.Context.PackageManager.HasSystemFeature(PackageManager.FeatureCamera))
{
var hasCameraPermission = !_cameraPermissionsDenied && HasPermission(Manifest.Permission.Camera);
if(!_cameraPermissionsDenied && !hasStorageWritePermission)
{
AskCameraPermission(Manifest.Permission.WriteExternalStorage);
return Task.FromResult(0);
}
if(!_cameraPermissionsDenied && !hasCameraPermission)
{
AskCameraPermission(Manifest.Permission.Camera);
return Task.FromResult(0);
}
if(!_cameraPermissionsDenied && hasCameraPermission && hasStorageWritePermission)
{
try
{
var root = new Java.IO.File(global::Android.OS.Environment.ExternalStorageDirectory, "bitwarden");
var file = new Java.IO.File(root, "temp_camera_photo.jpg");
if(!file.Exists())
{
file.ParentFile.Mkdirs();
file.CreateNewFile();
}
var outputFileUri = global::Android.Net.Uri.FromFile(file);
additionalIntents.AddRange(GetCameraIntents(outputFileUri));
}
catch(Java.IO.IOException) { }
}
}
var docIntent = new Intent(Intent.ActionOpenDocument); var docIntent = new Intent(Intent.ActionOpenDocument);
docIntent.AddCategory(Intent.CategoryOpenable); docIntent.AddCategory(Intent.CategoryOpenable);
docIntent.SetType("*/*"); docIntent.SetType("*/*");
var chooserIntent = Intent.CreateChooser(docIntent, AppResources.FileSource); var chooserIntent = Intent.CreateChooser(docIntent, AppResources.FileSource);
if(!_cameraPermissionsDenied && hasCameraPermission && hasStorageWritePermission)
{
try
{
var root = new Java.IO.File(global::Android.OS.Environment.ExternalStorageDirectory, "bitwarden");
var file = new Java.IO.File(root, "temp_camera_photo.jpg");
if(!file.Exists())
{
file.ParentFile.Mkdirs();
file.CreateNewFile();
}
var outputFileUri = global::Android.Net.Uri.FromFile(file);
additionalIntents.AddRange(GetCameraIntents(outputFileUri));
}
catch(Java.IO.IOException) { }
}
if(additionalIntents.Count > 0) if(additionalIntents.Count > 0)
{ {
chooserIntent.PutExtra(Intent.ExtraInitialIntents, additionalIntents.ToArray()); chooserIntent.PutExtra(Intent.ExtraInitialIntents, additionalIntents.ToArray());

View File

@@ -1,4 +1,5 @@
using Android.App; using Android.App;
using Android.Content.PM;
using Android.OS; using Android.OS;
using Bit.App.Abstractions; using Bit.App.Abstractions;
@@ -42,5 +43,6 @@ namespace Bit.Android.Services
} }
} }
public bool NfcEnabled => Utilities.NfcEnabled(); public bool NfcEnabled => Utilities.NfcEnabled();
public bool HasCamera => Xamarin.Forms.Forms.Context.PackageManager.HasSystemFeature(PackageManager.FeatureCamera);
} }
} }

View File

@@ -6,5 +6,6 @@
int Version { get; } int Version { get; }
float Scale { get; } float Scale { get; }
bool NfcEnabled { get; } bool NfcEnabled { get; }
bool HasCamera { get; }
} }
} }

View File

@@ -224,6 +224,11 @@
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<DependentUpon>AppResources.hr.resx</DependentUpon> <DependentUpon>AppResources.hr.resx</DependentUpon>
</Compile> </Compile>
<Compile Include="Resources\AppResources.hu.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>AppResources.hu.resx</DependentUpon>
</Compile>
<Compile Include="Resources\AppResources.id.Designer.cs"> <Compile Include="Resources\AppResources.id.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
@@ -239,6 +244,11 @@
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<DependentUpon>AppResources.ja.resx</DependentUpon> <DependentUpon>AppResources.ja.resx</DependentUpon>
</Compile> </Compile>
<Compile Include="Resources\AppResources.nl.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>AppResources.nl.resx</DependentUpon>
</Compile>
<Compile Include="Resources\AppResources.pl.Designer.cs"> <Compile Include="Resources\AppResources.pl.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
@@ -279,6 +289,16 @@
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<DependentUpon>AppResources.th.resx</DependentUpon> <DependentUpon>AppResources.th.resx</DependentUpon>
</Compile> </Compile>
<Compile Include="Resources\AppResources.tr.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>AppResources.tr.resx</DependentUpon>
</Compile>
<Compile Include="Resources\AppResources.uk.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>AppResources.uk.resx</DependentUpon>
</Compile>
<Compile Include="Resources\AppResources.zh-Hans.Designer.cs"> <Compile Include="Resources\AppResources.zh-Hans.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
@@ -352,6 +372,10 @@
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.hr.Designer.cs</LastGenOutput> <LastGenOutput>AppResources.hr.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Resources\AppResources.hu.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.hu.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Resources\AppResources.id.resx"> <EmbeddedResource Include="Resources\AppResources.id.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.id.Designer.cs</LastGenOutput> <LastGenOutput>AppResources.id.Designer.cs</LastGenOutput>
@@ -364,6 +388,10 @@
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.ja.Designer.cs</LastGenOutput> <LastGenOutput>AppResources.ja.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Resources\AppResources.nl.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.nl.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Resources\AppResources.pl.resx"> <EmbeddedResource Include="Resources\AppResources.pl.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.pl.Designer.cs</LastGenOutput> <LastGenOutput>AppResources.pl.Designer.cs</LastGenOutput>
@@ -396,6 +424,14 @@
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.th.Designer.cs</LastGenOutput> <LastGenOutput>AppResources.th.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Resources\AppResources.tr.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.tr.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Resources\AppResources.uk.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.uk.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Resources\AppResources.zh-Hans.resx"> <EmbeddedResource Include="Resources\AppResources.zh-Hans.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.zh-Hans.Designer.cs</LastGenOutput> <LastGenOutput>AppResources.zh-Hans.Designer.cs</LastGenOutput>

View File

@@ -3,6 +3,7 @@
public static class Constants public static class Constants
{ {
public const string AndroidAppProtocol = "androidapp://"; public const string AndroidAppProtocol = "androidapp://";
public const string iOSAppProtocol = "iosapp://";
public const string SettingFingerprintUnlockOn = "setting:fingerprintUnlockOn"; public const string SettingFingerprintUnlockOn = "setting:fingerprintUnlockOn";
public const string SettingPinUnlockOn = "setting:pinUnlockOn"; public const string SettingPinUnlockOn = "setting:pinUnlockOn";

View File

@@ -14,7 +14,7 @@ namespace Bit.App.Controls
{ {
HorizontalTextAlignment = TextAlignment.Center, HorizontalTextAlignment = TextAlignment.Center,
FontSize = 35, FontSize = 35,
FontFamily = Helpers.OnPlatform(iOS: "Courier", Android: "monospace", WinPhone: "Courier") FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", WinPhone: "Courier")
}; };
Entry = new ExtendedEntry Entry = new ExtendedEntry

View File

@@ -4,12 +4,18 @@ using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text.RegularExpressions;
namespace Bit.App.Models namespace Bit.App.Models
{ {
// ref: https://github.com/danesparza/domainname-parser // ref: https://github.com/danesparza/domainname-parser
public class DomainName public class DomainName
{ {
private const string IpRegex = "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." +
"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." +
"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." +
"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
private string _subDomain = string.Empty; private string _subDomain = string.Empty;
private string _domain = string.Empty; private string _domain = string.Empty;
private string _tld = string.Empty; private string _tld = string.Empty;
@@ -59,6 +65,20 @@ namespace Bit.App.Models
return retval; return retval;
} }
public static bool TryParseBaseDomain(string domainString, out string result)
{
if(Regex.IsMatch(domainString, IpRegex))
{
result = domainString;
return true;
}
DomainName domain;
var retval = TryParse(domainString, out domain);
result = domain?.BaseDomain;
return retval;
}
private static void ParseDomainName(string domainString, out string TLD, out string SLD, out string SubDomain, out TLDRule MatchingRule) private static void ParseDomainName(string domainString, out string TLD, out string SLD, out string SubDomain, out TLDRule MatchingRule)
{ {
// Make sure domain is all lowercase // Make sure domain is all lowercase

View File

@@ -115,10 +115,10 @@ namespace Bit.App.Models.Page
return Uri; return Uri;
} }
DomainName domain; string domain;
if(DomainName.TryParse(uri.Host, out domain)) if(DomainName.TryParseBaseDomain(uri.Host, out domain))
{ {
return domain.BaseDomain; return domain;
} }
return uri.Host; return uri.Host;

View File

@@ -49,7 +49,7 @@ namespace Bit.App.Pages
FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)), FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)),
Margin = new Thickness(15, 40, 15, 40), Margin = new Thickness(15, 40, 15, 40),
HorizontalTextAlignment = TextAlignment.Center, HorizontalTextAlignment = TextAlignment.Center,
FontFamily = Helpers.OnPlatform(iOS: "Courier", Android: "monospace", WinPhone: "Courier"), FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", WinPhone: "Courier"),
LineBreakMode = LineBreakMode.TailTruncation, LineBreakMode = LineBreakMode.TailTruncation,
VerticalOptions = LayoutOptions.Start VerticalOptions = LayoutOptions.Start
}; };

View File

@@ -25,6 +25,7 @@ namespace Bit.App.Pages
private readonly IGoogleAnalyticsService _googleAnalyticsService; private readonly IGoogleAnalyticsService _googleAnalyticsService;
private readonly ISettings _settings; private readonly ISettings _settings;
private readonly IAppInfoService _appInfoService; private readonly IAppInfoService _appInfoService;
private readonly IDeviceInfoService _deviceInfo;
private readonly string _defaultUri; private readonly string _defaultUri;
private readonly string _defaultName; private readonly string _defaultName;
private readonly bool _fromAutofill; private readonly bool _fromAutofill;
@@ -43,6 +44,7 @@ namespace Bit.App.Pages
_googleAnalyticsService = Resolver.Resolve<IGoogleAnalyticsService>(); _googleAnalyticsService = Resolver.Resolve<IGoogleAnalyticsService>();
_settings = Resolver.Resolve<ISettings>(); _settings = Resolver.Resolve<ISettings>();
_appInfoService = Resolver.Resolve<IAppInfoService>(); _appInfoService = Resolver.Resolve<IAppInfoService>();
_deviceInfo = Resolver.Resolve<IDeviceInfoService>();
Init(); Init();
} }
@@ -61,18 +63,21 @@ namespace Bit.App.Pages
NotesCell = new FormEditorCell(height: 180); NotesCell = new FormEditorCell(height: 180);
TotpCell = new FormEntryCell(AppResources.AuthenticatorKey, nextElement: NotesCell.Editor, TotpCell = new FormEntryCell(AppResources.AuthenticatorKey, nextElement: NotesCell.Editor,
useButton: true); useButton: _deviceInfo.HasCamera);
TotpCell.Button.Image = "camera"; if(_deviceInfo.HasCamera)
{
TotpCell.Button.Image = "camera";
}
TotpCell.Entry.DisableAutocapitalize = true; TotpCell.Entry.DisableAutocapitalize = true;
TotpCell.Entry.Autocorrect = false; TotpCell.Entry.Autocorrect = false;
TotpCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Courier", Android: "monospace", WinPhone: "Courier"); TotpCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", WinPhone: "Courier");
PasswordCell = new FormEntryCell(AppResources.Password, isPassword: true, nextElement: TotpCell.Entry, PasswordCell = new FormEntryCell(AppResources.Password, isPassword: true, nextElement: TotpCell.Entry,
useButton: true); useButton: true);
PasswordCell.Button.Image = "eye"; PasswordCell.Button.Image = "eye";
PasswordCell.Entry.DisableAutocapitalize = true; PasswordCell.Entry.DisableAutocapitalize = true;
PasswordCell.Entry.Autocorrect = false; PasswordCell.Entry.Autocorrect = false;
PasswordCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Courier", Android: "monospace", WinPhone: "Courier"); PasswordCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", WinPhone: "Courier");
UsernameCell = new FormEntryCell(AppResources.Username, nextElement: PasswordCell.Entry); UsernameCell = new FormEntryCell(AppResources.Username, nextElement: PasswordCell.Entry);
UsernameCell.Entry.DisableAutocapitalize = true; UsernameCell.Entry.DisableAutocapitalize = true;
@@ -142,7 +147,12 @@ namespace Bit.App.Pages
} }
else if(Device.RuntimePlatform == Device.Android) else if(Device.RuntimePlatform == Device.Android)
{ {
PasswordCell.Button.WidthRequest = TotpCell.Button.WidthRequest = 40; PasswordCell.Button.WidthRequest = 40;
if(TotpCell.Button != null)
{
TotpCell.Button.WidthRequest = 40;
}
} }
var saveToolBarItem = new ToolbarItem(AppResources.Save, null, async () => var saveToolBarItem = new ToolbarItem(AppResources.Save, null, async () =>
@@ -234,7 +244,10 @@ namespace Bit.App.Pages
TotpCell.InitEvents(); TotpCell.InitEvents();
FolderCell.InitEvents(); FolderCell.InitEvents();
PasswordCell.Button.Clicked += PasswordButton_Clicked; PasswordCell.Button.Clicked += PasswordButton_Clicked;
TotpCell.Button.Clicked += TotpButton_Clicked; if(TotpCell?.Button != null)
{
TotpCell.Button.Clicked += TotpButton_Clicked;
}
GenerateCell.Tapped += GenerateCell_Tapped; GenerateCell.Tapped += GenerateCell_Tapped;
if(!_fromAutofill && !_settings.GetValueOrDefault(AddedLoginAlertKey, false)) if(!_fromAutofill && !_settings.GetValueOrDefault(AddedLoginAlertKey, false))
@@ -266,7 +279,10 @@ namespace Bit.App.Pages
TotpCell.Dispose(); TotpCell.Dispose();
FolderCell.Dispose(); FolderCell.Dispose();
PasswordCell.Button.Clicked -= PasswordButton_Clicked; PasswordCell.Button.Clicked -= PasswordButton_Clicked;
TotpCell.Button.Clicked -= TotpButton_Clicked; if(TotpCell?.Button != null)
{
TotpCell.Button.Clicked -= TotpButton_Clicked;
}
GenerateCell.Tapped -= GenerateCell_Tapped; GenerateCell.Tapped -= GenerateCell_Tapped;
} }

View File

@@ -30,20 +30,15 @@ namespace Bit.App.Pages
Uri = uriString; Uri = uriString;
Uri uri; Uri uri;
DomainName domainName;
if(uriString?.StartsWith(Constants.AndroidAppProtocol) ?? false) if(uriString?.StartsWith(Constants.AndroidAppProtocol) ?? false)
{ {
_name = uriString.Substring(Constants.AndroidAppProtocol.Length); _name = uriString.Substring(Constants.AndroidAppProtocol.Length);
} }
else if(!System.Uri.TryCreate(uriString, UriKind.Absolute, out uri) || else if(!System.Uri.TryCreate(uriString, UriKind.Absolute, out uri) ||
!DomainName.TryParse(uri.Host, out domainName)) !DomainName.TryParseBaseDomain(uri.Host, out _name))
{ {
_name = "--"; _name = "--";
} }
else
{
_name = domainName.BaseDomain;
}
_loginService = Resolver.Resolve<ILoginService>(); _loginService = Resolver.Resolve<ILoginService>();
_deviceInfoService = Resolver.Resolve<IDeviceInfoService>(); _deviceInfoService = Resolver.Resolve<IDeviceInfoService>();
@@ -210,7 +205,7 @@ namespace Bit.App.Pages
return; return;
} }
if(Uri.StartsWith("http") && _deviceInfoService.Version < 21) if(_deviceInfoService.Version < 21)
{ {
MoreClickedAsync(login); MoreClickedAsync(login);
} }

View File

@@ -19,6 +19,7 @@ namespace Bit.App.Pages
private readonly IFolderService _folderService; private readonly IFolderService _folderService;
private readonly IUserDialogs _userDialogs; private readonly IUserDialogs _userDialogs;
private readonly IConnectivity _connectivity; private readonly IConnectivity _connectivity;
private readonly IDeviceInfoService _deviceInfo;
private readonly IGoogleAnalyticsService _googleAnalyticsService; private readonly IGoogleAnalyticsService _googleAnalyticsService;
private DateTime? _lastAction; private DateTime? _lastAction;
@@ -29,6 +30,7 @@ namespace Bit.App.Pages
_folderService = Resolver.Resolve<IFolderService>(); _folderService = Resolver.Resolve<IFolderService>();
_userDialogs = Resolver.Resolve<IUserDialogs>(); _userDialogs = Resolver.Resolve<IUserDialogs>();
_connectivity = Resolver.Resolve<IConnectivity>(); _connectivity = Resolver.Resolve<IConnectivity>();
_deviceInfo = Resolver.Resolve<IDeviceInfoService>();
_googleAnalyticsService = Resolver.Resolve<IGoogleAnalyticsService>(); _googleAnalyticsService = Resolver.Resolve<IGoogleAnalyticsService>();
Init(); Init();
@@ -58,12 +60,15 @@ namespace Bit.App.Pages
NotesCell.Editor.Text = login.Notes?.Decrypt(login.OrganizationId); NotesCell.Editor.Text = login.Notes?.Decrypt(login.OrganizationId);
TotpCell = new FormEntryCell(AppResources.AuthenticatorKey, nextElement: NotesCell.Editor, TotpCell = new FormEntryCell(AppResources.AuthenticatorKey, nextElement: NotesCell.Editor,
useButton: true); useButton: _deviceInfo.HasCamera);
if(_deviceInfo.HasCamera)
{
TotpCell.Button.Image = "camera";
}
TotpCell.Entry.Text = login.Totp?.Decrypt(login.OrganizationId); TotpCell.Entry.Text = login.Totp?.Decrypt(login.OrganizationId);
TotpCell.Button.Image = "camera";
TotpCell.Entry.DisableAutocapitalize = true; TotpCell.Entry.DisableAutocapitalize = true;
TotpCell.Entry.Autocorrect = false; TotpCell.Entry.Autocorrect = false;
TotpCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Courier", Android: "monospace", WinPhone: "Courier"); TotpCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", WinPhone: "Courier");
PasswordCell = new FormEntryCell(AppResources.Password, isPassword: true, nextElement: TotpCell.Entry, PasswordCell = new FormEntryCell(AppResources.Password, isPassword: true, nextElement: TotpCell.Entry,
useButton: true); useButton: true);
@@ -71,7 +76,7 @@ namespace Bit.App.Pages
PasswordCell.Button.Image = "eye"; PasswordCell.Button.Image = "eye";
PasswordCell.Entry.DisableAutocapitalize = true; PasswordCell.Entry.DisableAutocapitalize = true;
PasswordCell.Entry.Autocorrect = false; PasswordCell.Entry.Autocorrect = false;
PasswordCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Courier", Android: "monospace", WinPhone: "Courier"); PasswordCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", WinPhone: "Courier");
UsernameCell = new FormEntryCell(AppResources.Username, nextElement: PasswordCell.Entry); UsernameCell = new FormEntryCell(AppResources.Username, nextElement: PasswordCell.Entry);
UsernameCell.Entry.Text = login.Username?.Decrypt(login.OrganizationId); UsernameCell.Entry.Text = login.Username?.Decrypt(login.OrganizationId);
@@ -161,7 +166,12 @@ namespace Bit.App.Pages
} }
else if(Device.RuntimePlatform == Device.Android) else if(Device.RuntimePlatform == Device.Android)
{ {
PasswordCell.Button.WidthRequest = TotpCell.Button.WidthRequest = 40; PasswordCell.Button.WidthRequest = 40;
if(TotpCell.Button != null)
{
TotpCell.Button.WidthRequest = 40;
}
} }
var saveToolBarItem = new ToolbarItem(AppResources.Save, null, async () => var saveToolBarItem = new ToolbarItem(AppResources.Save, null, async () =>

View File

@@ -403,7 +403,7 @@ namespace Bit.App.Pages
} }
else if(selection == AppResources.Autofill) else if(selection == AppResources.Autofill)
{ {
if(Uri.StartsWith("http") && _deviceInfoService.Version < 21) if(_deviceInfoService.Version < 21)
{ {
MoreClickedAsync(login); MoreClickedAsync(login);
} }

View File

@@ -77,7 +77,7 @@ namespace Bit.App.Pages
} }
PasswordCell.Button1.Command = new Command(() => Model.RevealPassword = !Model.RevealPassword); PasswordCell.Button1.Command = new Command(() => Model.RevealPassword = !Model.RevealPassword);
PasswordCell.Button2.Command = new Command(() => Copy(Model.Password, AppResources.Password)); PasswordCell.Button2.Command = new Command(() => Copy(Model.Password, AppResources.Password));
PasswordCell.Value.FontFamily = Helpers.OnPlatform(iOS: "Courier", Android: "monospace", WinPhone: "Courier"); PasswordCell.Value.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", WinPhone: "Courier");
PasswordCell.Value.LineBreakMode = LineBreakMode.WordWrap; PasswordCell.Value.LineBreakMode = LineBreakMode.WordWrap;
// URI // URI
@@ -103,7 +103,7 @@ namespace Bit.App.Pages
TotpCodeCell.Button1.Command = new Command(() => Copy(Model.TotpCode, AppResources.VerificationCodeTotp)); TotpCodeCell.Button1.Command = new Command(() => Copy(Model.TotpCode, AppResources.VerificationCodeTotp));
TotpCodeCell.Sub.SetBinding(Label.TextProperty, nameof(VaultViewLoginPageModel.TotpSecond)); TotpCodeCell.Sub.SetBinding(Label.TextProperty, nameof(VaultViewLoginPageModel.TotpSecond));
TotpCodeCell.Sub.SetBinding(Label.TextColorProperty, nameof(VaultViewLoginPageModel.TotpColor)); TotpCodeCell.Sub.SetBinding(Label.TextColorProperty, nameof(VaultViewLoginPageModel.TotpColor));
TotpCodeCell.Value.FontFamily = Helpers.OnPlatform(iOS: "Courier", Android: "monospace", WinPhone: "Courier"); TotpCodeCell.Value.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", WinPhone: "Courier");
// Notes // Notes
NotesCell = new LabeledValueCell(); NotesCell = new LabeledValueCell();

View File

@@ -439,6 +439,15 @@ namespace Bit.App.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Tap this notification to view logins from your vault..
/// </summary>
public static string BitwardenAutofillServiceNotificationContentOld {
get {
return ResourceManager.GetString("BitwardenAutofillServiceNotificationContentOld", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Open Accessibility Settings. /// Looks up a localized string similar to Open Accessibility Settings.
/// </summary> /// </summary>

View File

@@ -996,35 +996,38 @@
<value>Dozvědět se více</value> <value>Dozvědět se více</value>
</data> </data>
<data name="ApiUrl" xml:space="preserve"> <data name="ApiUrl" xml:space="preserve">
<value>API Server URL</value> <value>URL serveru API</value>
</data> </data>
<data name="CustomEnvironment" xml:space="preserve"> <data name="CustomEnvironment" xml:space="preserve">
<value>Custom Environment</value> <value>Vlastní prostředí</value>
</data> </data>
<data name="CustomEnvironmentFooter" xml:space="preserve"> <data name="CustomEnvironmentFooter" xml:space="preserve">
<value>For advanced users. You can specify the base URL of each service independently.</value> <value>Pro pokročilé uživatele. Můžete zadat základní URL adresu každé služby zvlášť.</value>
</data> </data>
<data name="EnvironmentSaved" xml:space="preserve"> <data name="EnvironmentSaved" xml:space="preserve">
<value>The environment URLs have been saved.</value> <value>URL adresy vlastního prostředí byly uloženy.</value>
</data> </data>
<data name="FormattedIncorrectly" xml:space="preserve"> <data name="FormattedIncorrectly" xml:space="preserve">
<value>{0} is not correctly formatted.</value> <value>{0} nemá správný formát.</value>
<comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment> <comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment>
</data> </data>
<data name="IdentityUrl" xml:space="preserve"> <data name="IdentityUrl" xml:space="preserve">
<value>Identity Server URL</value> <value>URL serveru identity</value>
<comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment> <comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment>
</data> </data>
<data name="SelfHostedEnvironment" xml:space="preserve"> <data name="SelfHostedEnvironment" xml:space="preserve">
<value>Self-hosted Environment</value> <value>Vlastnoručně hostované prostředí</value>
</data> </data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve"> <data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Specify the base URL of your on-premise hosted bitwarden installation.</value> <value>Zadejte základní URL adresu vlastnoručně hostované aplikace bitwarden.</value>
</data> </data>
<data name="ServerUrl" xml:space="preserve"> <data name="ServerUrl" xml:space="preserve">
<value>Server URL</value> <value>URL serveru</value>
</data> </data>
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>URL serveru webového trezoru</value>
</data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data> </data>
</root> </root>

View File

@@ -996,35 +996,38 @@
<value>Aprender más</value> <value>Aprender más</value>
</data> </data>
<data name="ApiUrl" xml:space="preserve"> <data name="ApiUrl" xml:space="preserve">
<value>API Server URL</value> <value>URL del servidor de la API</value>
</data> </data>
<data name="CustomEnvironment" xml:space="preserve"> <data name="CustomEnvironment" xml:space="preserve">
<value>Custom Environment</value> <value>Entorno personalizado</value>
</data> </data>
<data name="CustomEnvironmentFooter" xml:space="preserve"> <data name="CustomEnvironmentFooter" xml:space="preserve">
<value>For advanced users. You can specify the base URL of each service independently.</value> <value>Para usuarios avanzados. Puedes especificar la URL base de cada servicio de forma independiente.</value>
</data> </data>
<data name="EnvironmentSaved" xml:space="preserve"> <data name="EnvironmentSaved" xml:space="preserve">
<value>The environment URLs have been saved.</value> <value>La URLs del entorno han sido guardadas.</value>
</data> </data>
<data name="FormattedIncorrectly" xml:space="preserve"> <data name="FormattedIncorrectly" xml:space="preserve">
<value>{0} is not correctly formatted.</value> <value>{0} no está formateado correctamente.</value>
<comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment> <comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment>
</data> </data>
<data name="IdentityUrl" xml:space="preserve"> <data name="IdentityUrl" xml:space="preserve">
<value>Identity Server URL</value> <value>URL del servidor de identidad</value>
<comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment> <comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment>
</data> </data>
<data name="SelfHostedEnvironment" xml:space="preserve"> <data name="SelfHostedEnvironment" xml:space="preserve">
<value>Self-hosted Environment</value> <value>Entorno de alojamiento propio</value>
</data> </data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve"> <data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Specify the base URL of your on-premise hosted bitwarden installation.</value> <value>Especifica la URL base de tu instalación de bitwarden de alojamiento propio.</value>
</data> </data>
<data name="ServerUrl" xml:space="preserve"> <data name="ServerUrl" xml:space="preserve">
<value>Server URL</value> <value>URL del servidor</value>
</data> </data>
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>URL del servidor de la bóveda web</value>
</data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data> </data>
</root> </root>

View File

@@ -1027,4 +1027,7 @@
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Web Vault Server URL</value>
</data> </data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data>
</root> </root>

View File

@@ -1027,4 +1027,7 @@
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Web Vault Server URL</value>
</data> </data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data>
</root> </root>

View File

@@ -1027,4 +1027,7 @@
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Web Vault Server URL</value>
</data> </data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data>
</root> </root>

View File

@@ -996,35 +996,38 @@
<value>Saznaj više</value> <value>Saznaj više</value>
</data> </data>
<data name="ApiUrl" xml:space="preserve"> <data name="ApiUrl" xml:space="preserve">
<value>API Server URL</value> <value>API poslužiteljskog URL-a</value>
</data> </data>
<data name="CustomEnvironment" xml:space="preserve"> <data name="CustomEnvironment" xml:space="preserve">
<value>Custom Environment</value> <value>Prilagođeno okruženje</value>
</data> </data>
<data name="CustomEnvironmentFooter" xml:space="preserve"> <data name="CustomEnvironmentFooter" xml:space="preserve">
<value>For advanced users. You can specify the base URL of each service independently.</value> <value>Za napredne korisnike. Samostalno možete odrediti osnovni URL svake usluge.</value>
</data> </data>
<data name="EnvironmentSaved" xml:space="preserve"> <data name="EnvironmentSaved" xml:space="preserve">
<value>The environment URLs have been saved.</value> <value>URL-ovi okoline su spremljeni.</value>
</data> </data>
<data name="FormattedIncorrectly" xml:space="preserve"> <data name="FormattedIncorrectly" xml:space="preserve">
<value>{0} is not correctly formatted.</value> <value>{0} nije ispravno formatiran.</value>
<comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment> <comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment>
</data> </data>
<data name="IdentityUrl" xml:space="preserve"> <data name="IdentityUrl" xml:space="preserve">
<value>Identity Server URL</value> <value>URL identiteta poslužitelja</value>
<comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment> <comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment>
</data> </data>
<data name="SelfHostedEnvironment" xml:space="preserve"> <data name="SelfHostedEnvironment" xml:space="preserve">
<value>Self-hosted Environment</value> <value>Vlastito hosting okruženje</value>
</data> </data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve"> <data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Specify the base URL of your on-premise hosted bitwarden installation.</value> <value>Navedite osnovni URL Vaše lokalno hostirane bitwarden instalacije.</value>
</data> </data>
<data name="ServerUrl" xml:space="preserve"> <data name="ServerUrl" xml:space="preserve">
<value>Server URL</value> <value>URL poslužitelja</value>
</data> </data>
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>URL poslužitelja web trezora</value>
</data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data> </data>
</root> </root>

View File

File diff suppressed because it is too large Load Diff

View File

@@ -1027,4 +1027,7 @@
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Web Vault Server URL</value>
</data> </data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data>
</root> </root>

View File

@@ -1027,4 +1027,7 @@
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Web Vault Server URL</value>
</data> </data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data>
</root> </root>

View File

@@ -1027,4 +1027,7 @@
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Web Vault Server URL</value>
</data> </data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data>
</root> </root>

View File

File diff suppressed because it is too large Load Diff

View File

@@ -1027,4 +1027,7 @@
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Web Vault Server URL</value>
</data> </data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data>
</root> </root>

View File

@@ -1027,4 +1027,7 @@
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Web Vault Server URL</value>
</data> </data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data>
</root> </root>

View File

@@ -996,35 +996,38 @@
<value>Saber mais</value> <value>Saber mais</value>
</data> </data>
<data name="ApiUrl" xml:space="preserve"> <data name="ApiUrl" xml:space="preserve">
<value>API Server URL</value> <value>URL do servidor da API</value>
</data> </data>
<data name="CustomEnvironment" xml:space="preserve"> <data name="CustomEnvironment" xml:space="preserve">
<value>Custom Environment</value> <value>Ambiente personalizado</value>
</data> </data>
<data name="CustomEnvironmentFooter" xml:space="preserve"> <data name="CustomEnvironmentFooter" xml:space="preserve">
<value>For advanced users. You can specify the base URL of each service independently.</value> <value>Para utilizadores avançados. Pode especificar o URL de base de cada serviço independentemente.</value>
</data> </data>
<data name="EnvironmentSaved" xml:space="preserve"> <data name="EnvironmentSaved" xml:space="preserve">
<value>The environment URLs have been saved.</value> <value>Os URLs de ambiente foram guardados.</value>
</data> </data>
<data name="FormattedIncorrectly" xml:space="preserve"> <data name="FormattedIncorrectly" xml:space="preserve">
<value>{0} is not correctly formatted.</value> <value>{0} não está formatado corretamente.</value>
<comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment> <comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment>
</data> </data>
<data name="IdentityUrl" xml:space="preserve"> <data name="IdentityUrl" xml:space="preserve">
<value>Identity Server URL</value> <value>URL do servidor de identidade</value>
<comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment> <comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment>
</data> </data>
<data name="SelfHostedEnvironment" xml:space="preserve"> <data name="SelfHostedEnvironment" xml:space="preserve">
<value>Self-hosted Environment</value> <value>Ambiente auto-hospedado</value>
</data> </data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve"> <data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Specify the base URL of your on-premise hosted bitwarden installation.</value> <value>Especifique o URL de base da sua instalação local do bitwarden.</value>
</data> </data>
<data name="ServerUrl" xml:space="preserve"> <data name="ServerUrl" xml:space="preserve">
<value>Server URL</value> <value>URL do servidor</value>
</data> </data>
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>URL do servidor do cofre web</value>
</data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data> </data>
</root> </root>

View File

@@ -1027,4 +1027,7 @@
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Web Vault Server URL</value>
</data> </data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data>
</root> </root>

View File

@@ -996,35 +996,38 @@
<value>Aflați mai multe</value> <value>Aflați mai multe</value>
</data> </data>
<data name="ApiUrl" xml:space="preserve"> <data name="ApiUrl" xml:space="preserve">
<value>API Server URL</value> <value>URL-ul serverului API</value>
</data> </data>
<data name="CustomEnvironment" xml:space="preserve"> <data name="CustomEnvironment" xml:space="preserve">
<value>Custom Environment</value> <value>Mediu particularizat</value>
</data> </data>
<data name="CustomEnvironmentFooter" xml:space="preserve"> <data name="CustomEnvironmentFooter" xml:space="preserve">
<value>For advanced users. You can specify the base URL of each service independently.</value> <value>Pentru utilizatorii avansați. Puteți specifica adresa URL de bază a fiecărui serviciu independent.</value>
</data> </data>
<data name="EnvironmentSaved" xml:space="preserve"> <data name="EnvironmentSaved" xml:space="preserve">
<value>The environment URLs have been saved.</value> <value>Adresele URL de mediu au fost salvate.</value>
</data> </data>
<data name="FormattedIncorrectly" xml:space="preserve"> <data name="FormattedIncorrectly" xml:space="preserve">
<value>{0} is not correctly formatted.</value> <value>{0} nu este formatat corect.</value>
<comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment> <comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment>
</data> </data>
<data name="IdentityUrl" xml:space="preserve"> <data name="IdentityUrl" xml:space="preserve">
<value>Identity Server URL</value> <value>URL-ul serverului de identitate</value>
<comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment> <comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment>
</data> </data>
<data name="SelfHostedEnvironment" xml:space="preserve"> <data name="SelfHostedEnvironment" xml:space="preserve">
<value>Self-hosted Environment</value> <value>Mediu găzduit în mod automat</value>
</data> </data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve"> <data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Specify the base URL of your on-premise hosted bitwarden installation.</value> <value>Specificați adresa URL de bază a instalării bitwarden.</value>
</data> </data>
<data name="ServerUrl" xml:space="preserve"> <data name="ServerUrl" xml:space="preserve">
<value>Server URL</value> <value>URL-ul serverului</value>
</data> </data>
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>URL-ul serverului seifului web</value>
</data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data> </data>
</root> </root>

View File

@@ -280,7 +280,7 @@
<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">
@@ -508,7 +508,7 @@
<value>Нажмите на иконку bitwarden в меню, чтобы запустить расширение.</value> <value>Нажмите на иконку bitwarden в меню, чтобы запустить расширение.</value>
</data> </data>
<data name="ExtensionTurnOn" xml:space="preserve"> <data name="ExtensionTurnOn" xml:space="preserve">
<value>Чтобы включить bitwarden в Safari и других приложениях, нажмите Еще в нижней строке меню.</value> <value>Чтобы включить bitwarden в Safari и других приложениях, нажмите "больше" в нижней строке меню.</value>
</data> </data>
<data name="Favorite" xml:space="preserve"> <data name="Favorite" xml:space="preserve">
<value>Избранный</value> <value>Избранный</value>
@@ -647,7 +647,7 @@
<value>Вы хотите перезаписать текущий пароль?</value> <value>Вы хотите перезаписать текущий пароль?</value>
</data> </data>
<data name="PushNotificationAlert" xml:space="preserve"> <data name="PushNotificationAlert" xml:space="preserve">
<value>bitwarden автоматически синхронизирует ваше хранилище при помощи push-уведомлений. Для вашего максимального удобства, пожалуйста, выберите Ок при следующем предложении включить push-уведомления.</value> <value>bitwarden автоматически синхронизирует ваше хранилище при помощи push-уведомлений. Для вашего максимального удобства, пожалуйста, выберите "Ok" при появлении предложения включить push-уведомления.</value>
<comment>Push notifications for apple products</comment> <comment>Push notifications for apple products</comment>
</data> </data>
<data name="RateTheApp" xml:space="preserve"> <data name="RateTheApp" xml:space="preserve">
@@ -996,35 +996,38 @@
<value>Узнайть больше</value> <value>Узнайть больше</value>
</data> </data>
<data name="ApiUrl" xml:space="preserve"> <data name="ApiUrl" xml:space="preserve">
<value>API Server URL</value> <value>API URL-адреса сервера</value>
</data> </data>
<data name="CustomEnvironment" xml:space="preserve"> <data name="CustomEnvironment" xml:space="preserve">
<value>Custom Environment</value> <value>Пользовательская среда</value>
</data> </data>
<data name="CustomEnvironmentFooter" xml:space="preserve"> <data name="CustomEnvironmentFooter" xml:space="preserve">
<value>For advanced users. You can specify the base URL of each service independently.</value> <value>Для опытных пользователей. Можно указать URL-адрес отдельно для каждой службы.</value>
</data> </data>
<data name="EnvironmentSaved" xml:space="preserve"> <data name="EnvironmentSaved" xml:space="preserve">
<value>The environment URLs have been saved.</value> <value>URL-адреса среды сохранены.</value>
</data> </data>
<data name="FormattedIncorrectly" xml:space="preserve"> <data name="FormattedIncorrectly" xml:space="preserve">
<value>{0} is not correctly formatted.</value> <value>{0} это неправильный формат.</value>
<comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment> <comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment>
</data> </data>
<data name="IdentityUrl" xml:space="preserve"> <data name="IdentityUrl" xml:space="preserve">
<value>Identity Server URL</value> <value>URL-адрес сервера идентификации</value>
<comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment> <comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment>
</data> </data>
<data name="SelfHostedEnvironment" xml:space="preserve"> <data name="SelfHostedEnvironment" xml:space="preserve">
<value>Self-hosted Environment</value> <value>Среда собственного хостинга</value>
</data> </data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve"> <data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Specify the base URL of your on-premise hosted bitwarden installation.</value> <value>Укажите URL-адрес bitwarden на вашем сервере.</value>
</data> </data>
<data name="ServerUrl" xml:space="preserve"> <data name="ServerUrl" xml:space="preserve">
<value>Server URL</value> <value>URL-адрес сервера</value>
</data> </data>
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>URL-адрес сервера веб-хранилища</value>
</data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data> </data>
</root> </root>

View File

@@ -1027,4 +1027,7 @@
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Web Vault Server URL</value>
</data> </data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data>
</root> </root>

View File

@@ -996,35 +996,38 @@
<value>Läs mer</value> <value>Läs mer</value>
</data> </data>
<data name="ApiUrl" xml:space="preserve"> <data name="ApiUrl" xml:space="preserve">
<value>API Server URL</value> <value>API server-URL</value>
</data> </data>
<data name="CustomEnvironment" xml:space="preserve"> <data name="CustomEnvironment" xml:space="preserve">
<value>Custom Environment</value> <value>Anpassad miljö</value>
</data> </data>
<data name="CustomEnvironmentFooter" xml:space="preserve"> <data name="CustomEnvironmentFooter" xml:space="preserve">
<value>For advanced users. You can specify the base URL of each service independently.</value> <value>För avancerade användare. Du kan ange bas-URL:en för varje tjänst oberoende av varandra.</value>
</data> </data>
<data name="EnvironmentSaved" xml:space="preserve"> <data name="EnvironmentSaved" xml:space="preserve">
<value>The environment URLs have been saved.</value> <value>Miljö-URL:er har sparats.</value>
</data> </data>
<data name="FormattedIncorrectly" xml:space="preserve"> <data name="FormattedIncorrectly" xml:space="preserve">
<value>{0} is not correctly formatted.</value> <value>{0} är inte korrekt formaterad.</value>
<comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment> <comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment>
</data> </data>
<data name="IdentityUrl" xml:space="preserve"> <data name="IdentityUrl" xml:space="preserve">
<value>Identity Server URL</value> <value>Identitetsserver-URL</value>
<comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment> <comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment>
</data> </data>
<data name="SelfHostedEnvironment" xml:space="preserve"> <data name="SelfHostedEnvironment" xml:space="preserve">
<value>Self-hosted Environment</value> <value>Egen-hostad miljö</value>
</data> </data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve"> <data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Specify the base URL of your on-premise hosted bitwarden installation.</value> <value>Ange bas-URL:en för din "on-premise"-hostade bitwarden-installation.</value>
</data> </data>
<data name="ServerUrl" xml:space="preserve"> <data name="ServerUrl" xml:space="preserve">
<value>Server URL</value> <value>Server-URL</value>
</data> </data>
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Webbvalv server-URL</value>
</data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data> </data>
</root> </root>

View File

@@ -1027,4 +1027,7 @@
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Web Vault Server URL</value>
</data> </data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data>
</root> </root>

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

@@ -996,35 +996,38 @@
<value>了解更多信息。</value> <value>了解更多信息。</value>
</data> </data>
<data name="ApiUrl" xml:space="preserve"> <data name="ApiUrl" xml:space="preserve">
<value>API Server URL</value> <value>API 服务器 URL</value>
</data> </data>
<data name="CustomEnvironment" xml:space="preserve"> <data name="CustomEnvironment" xml:space="preserve">
<value>Custom Environment</value> <value>自定义环境</value>
</data> </data>
<data name="CustomEnvironmentFooter" xml:space="preserve"> <data name="CustomEnvironmentFooter" xml:space="preserve">
<value>For advanced users. You can specify the base URL of each service independently.</value> <value>适用于高级用户,你可以分别指定各个服务的基础 URL。</value>
</data> </data>
<data name="EnvironmentSaved" xml:space="preserve"> <data name="EnvironmentSaved" xml:space="preserve">
<value>The environment URLs have been saved.</value> <value>各环境 URL 已保存。</value>
</data> </data>
<data name="FormattedIncorrectly" xml:space="preserve"> <data name="FormattedIncorrectly" xml:space="preserve">
<value>{0} is not correctly formatted.</value> <value>{0} 的格式不正确。</value>
<comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment> <comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment>
</data> </data>
<data name="IdentityUrl" xml:space="preserve"> <data name="IdentityUrl" xml:space="preserve">
<value>Identity Server URL</value> <value>身份服务器 URL</value>
<comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment> <comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment>
</data> </data>
<data name="SelfHostedEnvironment" xml:space="preserve"> <data name="SelfHostedEnvironment" xml:space="preserve">
<value>Self-hosted Environment</value> <value>自托管环境</value>
</data> </data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve"> <data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Specify the base URL of your on-premise hosted bitwarden installation.</value> <value>指定自己配置、托管的 bitwarden 环境的基础 URL。</value>
</data> </data>
<data name="ServerUrl" xml:space="preserve"> <data name="ServerUrl" xml:space="preserve">
<value>Server URL</value> <value>服务器 URL</value>
</data> </data>
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Web 存储库服务器 URL</value>
</data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data> </data>
</root> </root>

View File

@@ -1027,4 +1027,7 @@
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>Web Vault Server URL</value> <value>Web Vault Server URL</value>
</data> </data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
</data>
</root> </root>

View File

@@ -13,6 +13,8 @@ namespace Bit.App.Services
{ {
public class LoginService : ILoginService public class LoginService : ILoginService
{ {
private readonly string[] _ignoredSearchTerms = new string[] { "com", "net", "org", "android",
"io", "co", "uk", "au", "nz", "fr", "de", "tv", "info", "app", "apps", "eu", "me", "dev", "jp", "mobile" };
private readonly ILoginRepository _loginRepository; private readonly ILoginRepository _loginRepository;
private readonly IAttachmentRepository _attachmentRepository; private readonly IAttachmentRepository _attachmentRepository;
private readonly IAuthService _authService; private readonly IAuthService _authService;
@@ -78,33 +80,36 @@ namespace Bit.App.Services
} }
Uri uri = null; Uri uri = null;
DomainName domainName = null; string domainName = null;
var androidApp = UriIsAndroidApp(uriString); var mobileApp = UriIsMobileApp(uriString);
if(!androidApp && if(!mobileApp &&
(!Uri.TryCreate(uriString, UriKind.Absolute, out uri) || !DomainName.TryParse(uri.Host, out domainName))) (!Uri.TryCreate(uriString, UriKind.Absolute, out uri) ||
!DomainName.TryParseBaseDomain(uri.Host, out domainName)))
{ {
return null; return null;
} }
var androidAppWebUriString = WebUriFromAndroidAppUri(uriString); var mobileAppInfo = InfoFromMobileAppUri(uriString);
var mobileAppWebUriString = mobileAppInfo?.Item1;
var mobileAppSearchTerms = mobileAppInfo?.Item2;
var eqDomains = (await _settingsService.GetEquivalentDomainsAsync()).Select(d => d.ToArray()); var eqDomains = (await _settingsService.GetEquivalentDomainsAsync()).Select(d => d.ToArray());
var matchingDomains = new List<string>(); var matchingDomains = new List<string>();
var matchingFuzzyDomains = new List<string>(); var matchingFuzzyDomains = new List<string>();
foreach(var eqDomain in eqDomains) foreach(var eqDomain in eqDomains)
{ {
if(androidApp) if(mobileApp)
{ {
if(Array.IndexOf(eqDomain, uriString) >= 0) if(Array.IndexOf(eqDomain, uriString) >= 0)
{ {
matchingDomains.AddRange(eqDomain.Select(d => d).ToList()); matchingDomains.AddRange(eqDomain.Select(d => d).ToList());
} }
else if(androidAppWebUriString != null && Array.IndexOf(eqDomain, androidAppWebUriString) >= 0) else if(mobileAppWebUriString != null && Array.IndexOf(eqDomain, mobileAppWebUriString) >= 0)
{ {
matchingFuzzyDomains.AddRange(eqDomain.Select(d => d).ToList()); matchingFuzzyDomains.AddRange(eqDomain.Select(d => d).ToList());
} }
} }
else if(Array.IndexOf(eqDomain, domainName.BaseDomain) >= 0) else if(Array.IndexOf(eqDomain, domainName) >= 0)
{ {
matchingDomains.AddRange(eqDomain.Select(d => d).ToList()); matchingDomains.AddRange(eqDomain.Select(d => d).ToList());
} }
@@ -112,13 +117,13 @@ namespace Bit.App.Services
if(!matchingDomains.Any()) if(!matchingDomains.Any())
{ {
matchingDomains.Add(androidApp ? uriString : domainName.BaseDomain); matchingDomains.Add(mobileApp ? uriString : domainName);
} }
if(androidApp && androidAppWebUriString != null && if(mobileApp && mobileAppWebUriString != null &&
!matchingFuzzyDomains.Any() && !matchingDomains.Contains(androidAppWebUriString)) !matchingFuzzyDomains.Any() && !matchingDomains.Contains(mobileAppWebUriString))
{ {
matchingFuzzyDomains.Add(androidAppWebUriString); matchingFuzzyDomains.Add(mobileAppWebUriString);
} }
var matchingDomainsArray = matchingDomains.ToArray(); var matchingDomainsArray = matchingDomains.ToArray();
@@ -144,32 +149,66 @@ namespace Bit.App.Services
matchingLogins.Add(new Login(login)); matchingLogins.Add(new Login(login));
continue; continue;
} }
else if(androidApp && Array.IndexOf(matchingFuzzyDomainsArray, loginUriString) >= 0) else if(mobileApp && Array.IndexOf(matchingFuzzyDomainsArray, loginUriString) >= 0)
{ {
matchingFuzzyLogins.Add(new Login(login)); matchingFuzzyLogins.Add(new Login(login));
continue; continue;
} }
else if(!androidApp && Array.IndexOf(matchingDomainsArray, WebUriFromAndroidAppUri(loginUriString)) >= 0) else if(!mobileApp)
{ {
matchingFuzzyLogins.Add(new Login(login)); var info = InfoFromMobileAppUri(loginUriString);
continue; if(info?.Item1 != null && Array.IndexOf(matchingDomainsArray, info.Item1) >= 0)
{
matchingFuzzyLogins.Add(new Login(login));
continue;
}
} }
Uri loginUri; Uri loginUri;
DomainName loginDomainName; string loginDomainName = null;
if(!Uri.TryCreate(loginUriString, UriKind.Absolute, out loginUri) if(Uri.TryCreate(loginUriString, UriKind.Absolute, out loginUri)
|| !DomainName.TryParse(loginUri.Host, out loginDomainName)) && DomainName.TryParseBaseDomain(loginUri.Host, out loginDomainName))
{ {
continue; loginDomainName = loginDomainName.ToLowerInvariant();
if(Array.IndexOf(matchingDomainsArray, loginDomainName) >= 0)
{
matchingLogins.Add(new Login(login));
continue;
}
else if(mobileApp && Array.IndexOf(matchingFuzzyDomainsArray, loginDomainName) >= 0)
{
matchingFuzzyLogins.Add(new Login(login));
continue;
}
} }
if(Array.IndexOf(matchingDomainsArray, loginDomainName.BaseDomain) >= 0) if(mobileApp && mobileAppSearchTerms != null && mobileAppSearchTerms.Length > 0)
{ {
matchingLogins.Add(new Login(login)); var addedFromSearchTerm = false;
} var loginNameString = login.Name == null ? null :
else if(androidApp && Array.IndexOf(matchingFuzzyDomainsArray, loginDomainName.BaseDomain) >= 0) new CipherString(login.Name).Decrypt(login.OrganizationId)?.ToLowerInvariant();
{ foreach(var term in mobileAppSearchTerms)
matchingFuzzyLogins.Add(new Login(login)); {
addedFromSearchTerm = (loginDomainName != null && loginDomainName.Contains(term)) ||
(loginNameString != null && loginNameString.Contains(term));
if(!addedFromSearchTerm)
{
addedFromSearchTerm = (loginDomainName != null && term.Contains(loginDomainName.Split('.')[0]))
|| (loginNameString != null && term.Contains(loginNameString));
}
if(addedFromSearchTerm)
{
matchingFuzzyLogins.Add(new Login(login));
break;
}
}
if(addedFromSearchTerm)
{
continue;
}
} }
} }
@@ -303,7 +342,21 @@ namespace Bit.App.Services
return response; return response;
} }
private string WebUriFromAndroidAppUri(string androidAppUriString) private Tuple<string, string[]> InfoFromMobileAppUri(string mobileAppUriString)
{
if(UriIsAndroidApp(mobileAppUriString))
{
return InfoFromAndroidAppUri(mobileAppUriString);
}
else if(UriIsiOSApp(mobileAppUriString))
{
return InfoFromiOSAppUri(mobileAppUriString);
}
return null;
}
private Tuple<string, string[]> InfoFromAndroidAppUri(string androidAppUriString)
{ {
if(!UriIsAndroidApp(androidAppUriString)) if(!UriIsAndroidApp(androidAppUriString))
{ {
@@ -313,15 +366,39 @@ namespace Bit.App.Services
var androidUriParts = androidAppUriString.Replace(Constants.AndroidAppProtocol, string.Empty).Split('.'); var androidUriParts = androidAppUriString.Replace(Constants.AndroidAppProtocol, string.Empty).Split('.');
if(androidUriParts.Length >= 2) if(androidUriParts.Length >= 2)
{ {
return string.Join(".", androidUriParts[1], androidUriParts[0]); var webUri = string.Join(".", androidUriParts[1], androidUriParts[0]);
var searchTerms = androidUriParts.Where(p => !_ignoredSearchTerms.Contains(p))
.Select(p => p.ToLowerInvariant()).ToArray();
return new Tuple<string, string[]>(webUri, searchTerms);
} }
return null; return null;
} }
private Tuple<string, string[]> InfoFromiOSAppUri(string iosAppUriString)
{
if(!UriIsiOSApp(iosAppUriString))
{
return null;
}
var webUri = iosAppUriString.Replace(Constants.iOSAppProtocol, string.Empty);
return new Tuple<string, string[]>(webUri, null);
}
private bool UriIsMobileApp(string uriString)
{
return UriIsAndroidApp(uriString) || UriIsiOSApp(uriString);
}
private bool UriIsAndroidApp(string uriString) private bool UriIsAndroidApp(string uriString)
{ {
return uriString.StartsWith(Constants.AndroidAppProtocol); return uriString.StartsWith(Constants.AndroidAppProtocol);
} }
private bool UriIsiOSApp(string uriString)
{
return uriString.StartsWith(Constants.iOSAppProtocol);
}
} }
} }

View File

@@ -23,5 +23,6 @@ namespace Bit.iOS.Core.Services
} }
public float Scale => (float)UIScreen.MainScreen.Scale; public float Scale => (float)UIScreen.MainScreen.Scale;
public bool NfcEnabled => false; public bool NfcEnabled => false;
public bool HasCamera => true;
} }
} }

View File

@@ -11,11 +11,11 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>XPC!</string> <string>XPC!</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.9.0</string> <string>1.10.0</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>17</string> <string>18</string>
<key>NSExtension</key> <key>NSExtension</key>
<dict> <dict>
<key>NSExtensionAttributes</key> <key>NSExtensionAttributes</key>
@@ -83,6 +83,10 @@
<string>ro</string> <string>ro</string>
<string>id</string> <string>id</string>
<string>hr</string> <string>hr</string>
<string>hu</string>
<string>nl</string>
<string>tr</string>
<string>uk</string>
</array> </array>
</dict> </dict>
</plist> </plist>

View File

@@ -40,7 +40,7 @@ namespace Bit.iOS.Extension
View.BackgroundColor = new UIColor(red: 0.94f, green: 0.94f, blue: 0.96f, alpha: 1.0f); View.BackgroundColor = new UIColor(red: 0.94f, green: 0.94f, blue: 0.96f, alpha: 1.0f);
var descriptor = UIFontDescriptor.PreferredBody; var descriptor = UIFontDescriptor.PreferredBody;
PinLabel.Font = UIFont.FromName("Courier", 35); PinLabel.Font = UIFont.FromName("Menlo-Regular", 35);
InstructionLabel.Text = AppResources.EnterPIN; InstructionLabel.Text = AppResources.EnterPIN;
InstructionLabel.LineBreakMode = UILineBreakMode.WordWrap; InstructionLabel.LineBreakMode = UILineBreakMode.WordWrap;

View File

@@ -14,6 +14,7 @@ using Bit.iOS.Core;
using MobileCoreServices; using MobileCoreServices;
using Bit.iOS.Core.Controllers; using Bit.iOS.Core.Controllers;
using Bit.App.Resources; using Bit.App.Resources;
using Bit.App.Models;
namespace Bit.iOS.Extension namespace Bit.iOS.Extension
{ {
@@ -119,8 +120,19 @@ namespace Bit.iOS.Extension
public async Task LoadItemsAsync() public async Task LoadItemsAsync()
{ {
var combinedLogins = new List<Login>();
var logins = await _loginService.GetAllAsync(_context.UrlString); var logins = await _loginService.GetAllAsync(_context.UrlString);
_tableItems = logins?.Item1?.Select(s => new LoginViewModel(s)) if(logins?.Item1 != null)
{
combinedLogins.AddRange(logins.Item1);
}
if(logins?.Item2 != null)
{
combinedLogins.AddRange(logins.Item2);
}
_tableItems = combinedLogins.Select(s => new LoginViewModel(s))
.OrderBy(s => s.Name) .OrderBy(s => s.Name)
.ThenBy(s => s.Username) .ThenBy(s => s.Username)
.ToList() ?? new List<LoginViewModel>(); .ToList() ?? new List<LoginViewModel>();

View File

@@ -396,13 +396,13 @@
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="- - - -" lineBreakMode="tailTruncation" minimumFontSize="10" id="7373" translatesAutoresizingMaskIntoConstraints="NO" textAlignment="center" misplaced="YES"> <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="- - - -" lineBreakMode="tailTruncation" minimumFontSize="10" id="7373" translatesAutoresizingMaskIntoConstraints="NO" textAlignment="center" misplaced="YES">
<rect key="frame" x="30" y="104" width="540" height="17"/> <rect key="frame" x="30" y="104" width="540" height="17"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" name="Courier" family="Courier" pointSize="40"/> <fontDescription key="fontDescription" name="Menlo-Regular" family="Menlo" pointSize="40"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/> <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" id="7350" translatesAutoresizingMaskIntoConstraints="NO" textAlignment="center" misplaced="YES"> <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" id="7350" translatesAutoresizingMaskIntoConstraints="NO" textAlignment="center" misplaced="YES">
<rect key="frame" x="30" y="79" width="540" height="77"/> <rect key="frame" x="30" y="79" width="540" height="77"/>
<fontDescription key="fontDescription" name="Courier-BoldOblique" family="Courier" pointSize="14"/> <fontDescription key="fontDescription" name="Menlo-Regular" family="Menlo" pointSize="14"/>
<textInputTraits key="textInputTraits" keyboardType="numberPad"/> <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
<color key="backgroundColor" colorSpace="calibratedWhite" white="0" alpha="0"/> <color key="backgroundColor" colorSpace="calibratedWhite" white="0" alpha="0"/>
<color key="tintColor" colorSpace="calibratedWhite" white="0" alpha="0"/> <color key="tintColor" colorSpace="calibratedWhite" white="0" alpha="0"/>

View File

@@ -1,5 +1,6 @@
using System; using System;
using Foundation; using Foundation;
using Bit.App;
namespace Bit.iOS.Extension.Models namespace Bit.iOS.Extension.Models
{ {
@@ -31,13 +32,18 @@ namespace Bit.iOS.Extension.Models
set set
{ {
_uriString = value; _uriString = value;
if(_uriString != null && _uriString.Contains(".")) if(_uriString != null && !_uriString.StartsWith(Constants.iOSAppProtocol) && _uriString.Contains("."))
{ {
if(!_uriString.Contains("://") && !_uriString.Contains(" ")) if(!_uriString.Contains("://") && !_uriString.Contains(" "))
{ {
_uriString = string.Concat("http://", _uriString); _uriString = string.Concat("http://", _uriString);
} }
} }
if(!_uriString.StartsWith("http") && !_uriString.StartsWith(Constants.iOSAppProtocol))
{
_uriString = string.Concat(Constants.iOSAppProtocol, _uriString);
}
} }
} }
public string LoginTitle { get; set; } public string LoginTitle { get; set; }

View File

@@ -54,7 +54,7 @@ namespace Bit.iOS.Extension
View.BackgroundColor = new UIColor(red: 0.94f, green: 0.94f, blue: 0.96f, alpha: 1.0f); View.BackgroundColor = new UIColor(red: 0.94f, green: 0.94f, blue: 0.96f, alpha: 1.0f);
var descriptor = UIFontDescriptor.PreferredBody; var descriptor = UIFontDescriptor.PreferredBody;
PasswordLabel.Font = UIFont.FromName("Courier", descriptor.PointSize * 1.3f); PasswordLabel.Font = UIFont.FromName("Menlo-Regular", descriptor.PointSize * 1.3f);
PasswordLabel.LineBreakMode = UILineBreakMode.TailTruncation; PasswordLabel.LineBreakMode = UILineBreakMode.TailTruncation;
PasswordLabel.Lines = 1; PasswordLabel.Lines = 1;
PasswordLabel.AdjustsFontSizeToFitWidth = false; PasswordLabel.AdjustsFontSizeToFitWidth = false;

View File

@@ -28,7 +28,7 @@
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>com.8bit.bitwarden</string> <string>com.8bit.bitwarden</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>17</string> <string>18</string>
<key>CFBundleIconFiles</key> <key>CFBundleIconFiles</key>
<array> <array>
<string>Icon-72@2x.png</string> <string>Icon-72@2x.png</string>
@@ -49,7 +49,7 @@
<key>UILaunchStoryboardName</key> <key>UILaunchStoryboardName</key>
<string>LaunchScreen</string> <string>LaunchScreen</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.9.0</string> <string>1.10.0</string>
<key>UIMainStoryboardFile~ipad</key> <key>UIMainStoryboardFile~ipad</key>
<string>LaunchScreen</string> <string>LaunchScreen</string>
<key>UIViewControllerBasedStatusBarAppearance</key> <key>UIViewControllerBasedStatusBarAppearance</key>
@@ -99,6 +99,10 @@
<string>ro</string> <string>ro</string>
<string>id</string> <string>id</string>
<string>hr</string> <string>hr</string>
<string>hu</string>
<string>nl</string>
<string>tr</string>
<string>uk</string>
</array> </array>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>en</string> <string>en</string>

160
store/amazon/hu/copy.resx Normal file
View File

@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Title" xml:space="preserve">
<value>bitwarden Ingyenes Jelszó Kezelő</value>
</data>
<data name="Description" xml:space="preserve">
<value>bitwarden is the easiest and safest way to store all of your logins and passwords while conveniently keeping them synced between all of your devices.
Password theft is a serious problem. The websites and apps that you use are under attack every day. Security breaches occur and your passwords are stolen. When you reuse the same passwords across apps and websites hackers can easily access your email, bank, and other important accounts.
Security experts recommend that you use a different, randomly generated password for every account that you create. But how do you manage all those passwords? bitwarden makes it easy for you to create, store, and access your passwords.
bitwarden stores all of your logins in an encrypted vault that syncs across all of your devices. Since it's fully encrypted before it ever leaves your device, only you have access to your data. Not even the team at bitwarden can read your data, even if we wanted to. Your data is sealed with AES-256 bit encryption, salted hashing, and PBKDF2 SHA-256.</value>
</data>
<data name="ProductFeatureBullets" xml:space="preserve">
<value>- Sync your logins and passwords across all your browsers and devices
- Fill in logins on the web and in other apps automatically
- Automatically generate strong, secure passwords for your logins</value>
</data>
<data name="FeatureGraphic" xml:space="preserve">
<value>A secure and free password manager for all of your devices</value>
</data>
<data name="Screenshot1" xml:space="preserve">
<value>Manage all your logins and passwords from a secure vault</value>
</data>
<data name="Screenshot2" xml:space="preserve">
<value>Automatically generate strong, random, and secure passwords</value>
</data>
<data name="Screenshot3" xml:space="preserve">
<value>Protect your vault with fingerprint, PIN code, or master password</value>
</data>
<data name="Screenshot4" xml:space="preserve">
<value>Quickly auto-fill logins from within your web browser and other apps</value>
</data>
<data name="Screenshot5" xml:space="preserve">
<value>Sync and access your vault from multiple devices
- Phone
- Tablet
- Desktop
- Web</value>
</data>
</root>

160
store/amazon/nl/copy.resx Normal file
View File

@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Title" xml:space="preserve">
<value>bitwarden - Gratis wachtwoordbeheerder</value>
</data>
<data name="Description" xml:space="preserve">
<value>bitwarden is de makkelijkste en veiligste manier om al uw logins en wachtwoorden op te slaan en ze te synchroniseren tussen al uw apparaten.
Diefstal van wachtwoorden is een ernstig probleem. De websites en apps die u gebruikt worden dagelijks aangevallen. Beveiligingslekken komen voor en wachtwoorden worden gestolen. Als u dezelfde wachtwoorden gebruikt voor meerdere apps en websites, kunnen hackers makkelijk toegang krijgen tot uw e-mail, bankgegevens en andere belangrijke accounts.
Beveiligingsexperts bevelen aan dat u een verschillend, willekeurig gegenereerd wachtwoord gebruikt voor ieder account. Maar hoe beheer je al die wachtwoorden? bitwarden maakt het voor u gemakkelijk om ze te genereren, op te slaan en te gebruiken.
bitwarden slaat al uw logins op in een versleutelde kluis die gesynchroniseerd wordt tussen al uw apparaten. Omdat het volledig versleuteld is voor het zelfs maar het internet opgaat, heeft alleen u toegang tot uw gegevens. Zelfs het bitwarden-team kan niets uitlezen, zelfs al zouden we dat willen. Uw gegevens zijn beveiligd met AES-256 bit encryptie, salted hashing en PBKDF2 SHA-256.</value>
</data>
<data name="ProductFeatureBullets" xml:space="preserve">
<value>- Synchroniseer uw logins en wachtwoorden tussen al uw browsers en apparaten
- Automatische invulmogelijkheid op internet en in andere apps
- Genereer automatisch sterke, veilige wachtwoorden voor uw logins</value>
</data>
<data name="FeatureGraphic" xml:space="preserve">
<value>Een veilige en gratis wachtwoordbeheerder voor al uw apparaten</value>
</data>
<data name="Screenshot1" xml:space="preserve">
<value>Beheer al uw logins en wachtwoorden vanuit een beveiligde kluis</value>
</data>
<data name="Screenshot2" xml:space="preserve">
<value>Genereer automatisch sterke, willekeurige en veilige wachtwoorden</value>
</data>
<data name="Screenshot3" xml:space="preserve">
<value>Bescherm uw kluis met een vingerafdruk, PIN-code of hoofdwachtwoord</value>
</data>
<data name="Screenshot4" xml:space="preserve">
<value>Snelle auto-invulling van uw logins in uw webbrowser en andere apps</value>
</data>
<data name="Screenshot5" xml:space="preserve">
<value>Synchroniseer en krijg toegang tot uw kluis op meerdere apparaten
- Telefoon
- Tablet
- Computer
- Web (internet)</value>
</data>
</root>

160
store/amazon/tr/copy.resx Normal file
View File

@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Title" xml:space="preserve">
<value>bitwarden Ücretsiz Parola Yöneticisi</value>
</data>
<data name="Description" xml:space="preserve">
<value>bitwarden, tüm giriş bilgilerinizi ve şifrelerinizi saklamanın ve tüm cihazlarınız arasında senkronize edilmesini kolaylaştırmanın en kolay ve en güvenli yoludur.
Parola hırsızlığı ciddi bir problemdir. Kullandığınız web siteleri ve uygulamalar her gün saldırı altında. Güvenlik açıkları olabiliyor ve parolalarınız çalınıyor. Uygulamalarda ve web sitelerinde aynı şifreleri tekrar kullandığınızda bilgisayar korsanları e-postanıza, banka ve diğer önemli hesaplarınıza kolayca erişebilir.
Güvenlik uzmanları, oluşturduğunuz her hesap için rastgele oluşturulmuş farklı şifreler kullanmanızı öneriyor. Ancak tüm bu şifreleri nasıl yönetiyorsunuz? bitwarden, parolalarınızı oluşturmanız, depolamanız ve bunlara erişmenizi kolaylaştırır.
bitwarden, tüm giriş bilgilerinizi, tüm cihazlarınızla senkronize edilen şifreli kasada saklar. Cihazınızdan ayrılmadan önce tamamen şifrelendiğinden verilerinize yalnızca siz erişebilirsiniz. bitwarden'daki ekip bile, biz istesek bile verilerinizi okuyamayız. Verileriniz AES-256 bit şifreleme, karıştırılmış sağlamalar ve PBKDF2 SHA-256 ile mühürlenmiştir.</value>
</data>
<data name="ProductFeatureBullets" xml:space="preserve">
<value>- Sync your logins and passwords across all your browsers and devices
- Fill in logins on the web and in other apps automatically
- Automatically generate strong, secure passwords for your logins</value>
</data>
<data name="FeatureGraphic" xml:space="preserve">
<value>Tüm aygıtlarınız için güvenli ve ücretsiz bir parola yöneticisi</value>
</data>
<data name="Screenshot1" xml:space="preserve">
<value>Tüm giriş bilgilerinizi ve parolalarınızı güvenli bir kasadan yönetin</value>
</data>
<data name="Screenshot2" xml:space="preserve">
<value>Otomatik olarak güçlü, rastgele ve güvenli parolalar oluşturun</value>
</data>
<data name="Screenshot3" xml:space="preserve">
<value>Protect your vault with fingerprint, PIN code, or master password</value>
</data>
<data name="Screenshot4" xml:space="preserve">
<value>Quickly auto-fill logins from within your web browser and other apps</value>
</data>
<data name="Screenshot5" xml:space="preserve">
<value>Sync and access your vault from multiple devices
- Phone
- Tablet
- Desktop
- Web</value>
</data>
</root>

160
store/amazon/uk/copy.resx Normal file
View File

@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Title" xml:space="preserve">
<value>bitwarden - Безкоштовний менеджер паролів</value>
</data>
<data name="Description" xml:space="preserve">
<value>bitwarden - це найлегший і найбезпечніший спосіб зберігання всіх ваших паролів та зручна їх синхронізація між всіма пристроями.
Викрадання паролів є серйозною проблемою. Веб-сайти й програми, які ви використовуєте, атакуються щодня. При виникненні їх вразливості безпеки всі ваші паролі можуть бути викрадені. Якщо ви використовуєте однаковий пароль для всіх програм та веб-сайтів, хакери можуть з легкістю отримати доступ до вашої електронної пошти, банківських облікових записів та інших важливих даних.
Експерти з цифрової безпеки рекомендують використовувати різні, випадково згенеровані паролі для кожного облікового запису. Але як ви будете керувати всіма цими різними паролями? bitwarden дозволяє вам легко створювати, зберігати й отримувати доступ до ваших паролів.
bitwarden зберігає всі ваші дані в зашифрованому сховищі, яке синхронізується на всіх пристроях. У зв'язку з тим, що ваші дані повністю шифруються ще до того, як покинуть ваш пристрій, лише ви маєте до них доступ. Навіть ми в bitwarden не зможемо прочитати ваші дані, навіть якщо захочемо. Ваші дані зашифровані з використанням алгоритму AES-256 та PBKDF2 SHA-256.</value>
</data>
<data name="ProductFeatureBullets" xml:space="preserve">
<value>- Синхронізуйте свої паролі у всіх своїх пристроях і веб-браузерах
- Автоматично заповнюйте паролі в браузері та інших програмах
- Автоматично генеруйте стійкі та надійні паролі</value>
</data>
<data name="FeatureGraphic" xml:space="preserve">
<value>Захищений і безкоштовний менеджер паролів для всіх ваших пристроїв</value>
</data>
<data name="Screenshot1" xml:space="preserve">
<value>Керуйте всіма своїми записами в захищеному сховищі</value>
</data>
<data name="Screenshot2" xml:space="preserve">
<value>Автоматично генеруйте стійкі, випадкові та надійні паролі</value>
</data>
<data name="Screenshot3" xml:space="preserve">
<value>Захистіть своє сховище за допомогою відбитку пальця, PIN-коду, або головного пароля</value>
</data>
<data name="Screenshot4" xml:space="preserve">
<value>Швидке автозаповнення паролів у веб-браузері та інших програмах</value>
</data>
<data name="Screenshot5" xml:space="preserve">
<value>Синхронізація і доступ до сховища з різних пристроїв
- Телефон
- Планшет
- Комп'ютер
- Веб-браузер</value>
</data>
</root>

View File

@@ -118,7 +118,7 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="Name" xml:space="preserve"> <data name="Name" xml:space="preserve">
<value>bitwarden Gestor de contraseñas gratuito</value> <value>bitwarden Gestor de contraseñas</value>
</data> </data>
<data name="Description" xml:space="preserve"> <data name="Description" xml:space="preserve">
<value>bitwarden es la manera más fácil y segura de guardar todos usuarios y contraseñas mientras se mantienen sincronizados entre todos tus dispositivos. La aplicación de bitwarden permite que te identifiques rápidamente en cualquier sitio web a través de Safari o Chrome and es soportada por cientos de otras aplicaciones populares. <value>bitwarden es la manera más fácil y segura de guardar todos usuarios y contraseñas mientras se mantienen sincronizados entre todos tus dispositivos. La aplicación de bitwarden permite que te identifiques rápidamente en cualquier sitio web a través de Safari o Chrome and es soportada por cientos de otras aplicaciones populares.

150
store/apple/hu/copy.resx Normal file
View File

@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Name" xml:space="preserve">
<value>bitwarden Jelszó Kezelő</value>
</data>
<data name="Description" xml:space="preserve">
<value>bitwarden is the easiest and safest way to store all of your logins and passwords while conveniently keeping them synced between all of your devices. The bitwarden app extension allows you to quickly log into any website through Safari or Chrome and is supported by hundreds of other popular apps.
Password theft is a serious problem. The websites and apps that you use are under attack every day. Security breaches occur and your passwords are stolen. When you reuse the same passwords across apps and websites hackers can easily access your email, bank, and other important accounts.
Security experts recommend that you use a different, randomly generated password for every account that you create. But how do you manage all those passwords? bitwarden makes it easy for you to create, store, and access your passwords.
bitwarden stores all of your logins in an encrypted vault that syncs across all of your devices. Since it's fully encrypted before it ever leaves your device, only you have access to your data. Not even the team at bitwarden can read your data, even if we wanted to. Your data is sealed with AES-256 bit encryption, salted hashing, and PBKDF2 SHA-256.</value>
</data>
<data name="Keywords" xml:space="preserve">
<value>bitwarden,bit warden,8bit,password,login,free password manager,password manager,login manager</value>
</data>
<data name="Screenshot1" xml:space="preserve">
<value>Manage all your logins and passwords from a secure vault</value>
</data>
<data name="Screenshot2" xml:space="preserve">
<value>Automatically generate strong, random, and secure passwords</value>
</data>
<data name="Screenshot3" xml:space="preserve">
<value>Protect your vault with Touch ID, PIN code, or master password</value>
</data>
<data name="Screenshot4" xml:space="preserve">
<value>Auto-fill logins from Safari, Chrome, and hundreds of other apps</value>
</data>
<data name="Screenshot5" xml:space="preserve">
<value>Sync and access your vault from multiple devices</value>
</data>
</root>

150
store/apple/nl/copy.resx Normal file
View File

@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Name" xml:space="preserve">
<value>bitwarden - Gratis wachtwoordbeheerder</value>
</data>
<data name="Description" xml:space="preserve">
<value>bitwarden is de makkelijkste en veiligste manier om al uw logins en wachtwoorden op te slaan en ze te synchroniseren tussen al uw apparaten.
Diefstal van wachtwoorden is een ernstig probleem. De websites en apps die u gebruikt worden dagelijks aangevallen. Beveiligingslekken komen voor en wachtwoorden worden gestolen. Als u dezelfde wachtwoorden gebruikt voor meerdere apps en websites, kunnen hackers makkelijk toegang krijgen tot uw e-mail, bankgegevens en andere belangrijke accounts.
Beveiligingsexperts bevelen aan dat u een verschillend, willekeurig gegenereerd wachtwoord gebruikt voor ieder account. Maar hoe beheer je al die wachtwoorden? bitwarden maakt het voor u gemakkelijk om ze te genereren, op te slaan en te gebruiken.
bitwarden slaat al uw logins op in een versleutelde kluis die gesynchroniseerd wordt tussen al uw apparaten. Omdat het volledig versleuteld is voor het zelfs maar het internet opgaat, heeft alleen u toegang tot uw gegevens. Zelfs het bitwarden-team kan niets uitlezen, zelfs al zouden we dat willen. Uw gegevens zijn beveiligd met AES-256 bit encryptie, salted hashing en PBKDF2 SHA-256.</value>
</data>
<data name="Keywords" xml:space="preserve">
<value>bitwarden,bit warden,8bit,wachtwoord,login,gratis wachtwoordbeheerder,wachtwoordbeheerder,inlogbeheerder</value>
</data>
<data name="Screenshot1" xml:space="preserve">
<value>Beheer al uw logins en wachtwoorden vanuit een beveiligde kluis</value>
</data>
<data name="Screenshot2" xml:space="preserve">
<value>Genereer automatisch sterke, willekeurige en veilige wachtwoorden</value>
</data>
<data name="Screenshot3" xml:space="preserve">
<value>Bescherm uw kluis met Touch ID, een PIN-code of hoofdwachtwoord</value>
</data>
<data name="Screenshot4" xml:space="preserve">
<value>Automatische invulling van logins in Safari, Chrome en honderden andere apps</value>
</data>
<data name="Screenshot5" xml:space="preserve">
<value>Synchroniseer en krijg toegang tot uw kluis op meerdere apparaten</value>
</data>
</root>

150
store/apple/tr/copy.resx Normal file
View File

@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Name" xml:space="preserve">
<value>bitwarden Parola Yöneticisi</value>
</data>
<data name="Description" xml:space="preserve">
<value>bitwarden is the easiest and safest way to store all of your logins and passwords while conveniently keeping them synced between all of your devices. The bitwarden app extension allows you to quickly log into any website through Safari or Chrome and is supported by hundreds of other popular apps.
Password theft is a serious problem. The websites and apps that you use are under attack every day. Security breaches occur and your passwords are stolen. When you reuse the same passwords across apps and websites hackers can easily access your email, bank, and other important accounts.
Security experts recommend that you use a different, randomly generated password for every account that you create. But how do you manage all those passwords? bitwarden makes it easy for you to create, store, and access your passwords.
bitwarden stores all of your logins in an encrypted vault that syncs across all of your devices. Since it's fully encrypted before it ever leaves your device, only you have access to your data. Not even the team at bitwarden can read your data, even if we wanted to. Your data is sealed with AES-256 bit encryption, salted hashing, and PBKDF2 SHA-256.</value>
</data>
<data name="Keywords" xml:space="preserve">
<value>bitwarden,bit warden,8bit,password,login,free password manager,password manager,login manager</value>
</data>
<data name="Screenshot1" xml:space="preserve">
<value>Tüm giriş bilgilerinizi ve parolalarınızı güvenli bir kasadan yönetin</value>
</data>
<data name="Screenshot2" xml:space="preserve">
<value>Otomatik olarak güçlü, rastgele ve güvenli parolalar oluşturun</value>
</data>
<data name="Screenshot3" xml:space="preserve">
<value>Protect your vault with Touch ID, PIN code, or master password</value>
</data>
<data name="Screenshot4" xml:space="preserve">
<value>Auto-fill logins from Safari, Chrome, and hundreds of other apps</value>
</data>
<data name="Screenshot5" xml:space="preserve">
<value>Hesabınzı eşitleyin ve birden fazla cıhazdan kasanıza ulaşın</value>
</data>
</root>

150
store/apple/uk/copy.resx Normal file
View File

@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Name" xml:space="preserve">
<value>bitwarden - Менеджер паролів</value>
</data>
<data name="Description" xml:space="preserve">
<value>bitwarden - це найлегший і найбезпечніший спосіб зберігання всіх ваших паролів та зручна їх синхронізація між всіма пристроями. Розширення програми bitwarden дозволяє вам швидко виконувати вхід на будь-якому веб-сайті в Safari чи Chrome, а також підтримується сотнями інших популярних програм.
Викрадання паролів є серйозною проблемою. Веб-сайти й програми, які ви використовуєте, атакуються щодня. При виникненні їх вразливості безпеки всі ваші паролі можуть бути викрадені. Якщо ви використовуєте однаковий пароль для всіх програм та веб-сайтів, хакери можуть з легкістю отримати доступ до вашої електронної пошти, банківських облікових записів та інших важливих даних.
Експерти з цифрової безпеки рекомендують використовувати різні, випадково згенеровані паролі для кожного облікового запису. Але як ви будете керувати всіма цими різними паролями? bitwarden дозволяє вам легко створювати, зберігати й отримувати доступ до ваших паролів.
bitwarden зберігає всі ваші дані в зашифрованому сховищі, яке синхронізується на всіх пристроях. У зв'язку з тим, що ваші дані повністю шифруються ще до того, як покинуть ваш пристрій, лише ви маєте до них доступ. Навіть ми в bitwarden не зможемо прочитати ваші дані, навіть якщо захочемо. Ваші дані зашифровані з використанням алгоритму AES-256 та PBKDF2 SHA-256.</value>
</data>
<data name="Keywords" xml:space="preserve">
<value>bitwarden,bit warden,8bit,пароль,вхід,безкоштовний менеджер паролів,менеджер паролів,менеджер входів</value>
</data>
<data name="Screenshot1" xml:space="preserve">
<value>Керуйте всіма своїми записами в захищеному сховищі</value>
</data>
<data name="Screenshot2" xml:space="preserve">
<value>Автоматично генеруйте стійкі, випадкові та надійні паролі</value>
</data>
<data name="Screenshot3" xml:space="preserve">
<value>Захистіть своє сховище за допомогою Touch ID, PIN-коду, або головного пароля</value>
</data>
<data name="Screenshot4" xml:space="preserve">
<value>Автозаповнення паролів у Safari, Chrome та сотнях інших програм</value>
</data>
<data name="Screenshot5" xml:space="preserve">
<value>Синхронізуйте й отримуйте доступ до вашого сховища на багатьох пристроях</value>
</data>
</root>

161
store/google/hu/copy.resx Normal file
View File

@@ -0,0 +1,161 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Title" xml:space="preserve">
<value>bitwarden Jelszó Kezelő</value>
<comment>Max 30 characters</comment>
</data>
<data name="ShortDescription" xml:space="preserve">
<value>bitwarden is a login and password manager that helps keep you safe while online.</value>
<comment>Max 80 characters</comment>
</data>
<data name="FullDesciption" xml:space="preserve">
<value>bitwarden is the easiest and safest way to store all of your logins and passwords while conveniently keeping them synced between all of your devices.
Password theft is a serious problem. The websites and apps that you use are under attack every day. Security breaches occur and your passwords are stolen. When you reuse the same passwords across apps and websites hackers can easily access your email, bank, and other important accounts.
Security experts recommend that you use a different, randomly generated password for every account that you create. But how do you manage all those passwords? bitwarden makes it easy for you to create, store, and access your passwords.
bitwarden stores all of your logins in an encrypted vault that syncs across all of your devices. Since it's fully encrypted before it ever leaves your device, only you have access to your data. Not even the team at bitwarden can read your data, even if we wanted to. Your data is sealed with AES-256 bit encryption, salted hashing, and PBKDF2 SHA-256.</value>
<comment>Max 4000 characters</comment>
</data>
<data name="FeatureGraphic" xml:space="preserve">
<value>A secure and free password manager for all of your devices</value>
</data>
<data name="Screenshot1" xml:space="preserve">
<value>Manage all your logins and passwords from a secure vault</value>
</data>
<data name="Screenshot2" xml:space="preserve">
<value>Automatically generate strong, random, and secure passwords</value>
</data>
<data name="Screenshot3" xml:space="preserve">
<value>Protect your vault with fingerprint, PIN code, or master password</value>
</data>
<data name="Screenshot4" xml:space="preserve">
<value>Quickly auto-fill logins from within your web browser and other apps</value>
</data>
<data name="Screenshot5" xml:space="preserve">
<value>Sync and access your vault from multiple devices
- Phone
- Tablet
- Desktop
- Web</value>
</data>
</root>

161
store/google/nl/copy.resx Normal file
View File

@@ -0,0 +1,161 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Title" xml:space="preserve">
<value>bitwarden - Gratis wachtwoordbeheerder</value>
<comment>Max 30 characters</comment>
</data>
<data name="ShortDescription" xml:space="preserve">
<value>bitwarden is een login- en wachtwoordbeheerder waardoor u online veilig blijft.</value>
<comment>Max 80 characters</comment>
</data>
<data name="FullDesciption" xml:space="preserve">
<value>bitwarden is de makkelijkste en veiligste manier om al uw logins en wachtwoorden op te slaan en ze te synchroniseren tussen al uw apparaten.
Diefstal van wachtwoorden is een ernstig probleem. De websites en apps die u gebruikt worden dagelijks aangevallen. Beveiligingslekken komen voor en wachtwoorden worden gestolen. Als u dezelfde wachtwoorden gebruikt voor meerdere apps en websites, kunnen hackers makkelijk toegang krijgen tot uw e-mail, bankgegevens en andere belangrijke accounts.
Beveiligingsexperts bevelen aan dat u een verschillend, willekeurig gegenereerd wachtwoord gebruikt voor ieder account. Maar hoe beheer je al die wachtwoorden? bitwarden maakt het voor u gemakkelijk om ze te genereren, op te slaan en te gebruiken.
bitwarden slaat al uw logins op in een versleutelde kluis die gesynchroniseerd wordt tussen al uw apparaten. Omdat het volledig versleuteld is voor het zelfs maar het internet opgaat, heeft alleen u toegang tot uw gegevens. Zelfs het bitwarden-team kan niets uitlezen, zelfs al zouden we dat willen. Uw gegevens zijn beveiligd met AES-256 bit encryptie, salted hashing en PBKDF2 SHA-256.</value>
<comment>Max 4000 characters</comment>
</data>
<data name="FeatureGraphic" xml:space="preserve">
<value>Een veilige en gratis wachtwoordbeheerder voor al uw apparaten</value>
</data>
<data name="Screenshot1" xml:space="preserve">
<value>Beheer al uw logins en wachtwoorden vanuit een beveiligde kluis</value>
</data>
<data name="Screenshot2" xml:space="preserve">
<value>Genereer automatisch sterke, willekeurige en veilige wachtwoorden</value>
</data>
<data name="Screenshot3" xml:space="preserve">
<value>Bescherm uw kluis met een vingerafdruk, PIN-code of hoofdwachtwoord</value>
</data>
<data name="Screenshot4" xml:space="preserve">
<value>Automatische invulling van uw logins in uw webbrowser en andere apps</value>
</data>
<data name="Screenshot5" xml:space="preserve">
<value>Synchroniseer en krijg toegang tot uw kluis op meerdere apparaten
- Telefoon
- Tablet
- Computer
- Web (internet)</value>
</data>
</root>

161
store/google/tr/copy.resx Normal file
View File

@@ -0,0 +1,161 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Title" xml:space="preserve">
<value>bitwarden Parola Yöneticisi</value>
<comment>Max 30 characters</comment>
</data>
<data name="ShortDescription" xml:space="preserve">
<value>bitwarden is a login and password manager that helps keep you safe while online.</value>
<comment>Max 80 characters</comment>
</data>
<data name="FullDesciption" xml:space="preserve">
<value>bitwarden is the easiest and safest way to store all of your logins and passwords while conveniently keeping them synced between all of your devices.
Password theft is a serious problem. The websites and apps that you use are under attack every day. Security breaches occur and your passwords are stolen. When you reuse the same passwords across apps and websites hackers can easily access your email, bank, and other important accounts.
Security experts recommend that you use a different, randomly generated password for every account that you create. But how do you manage all those passwords? bitwarden makes it easy for you to create, store, and access your passwords.
bitwarden stores all of your logins in an encrypted vault that syncs across all of your devices. Since it's fully encrypted before it ever leaves your device, only you have access to your data. Not even the team at bitwarden can read your data, even if we wanted to. Your data is sealed with AES-256 bit encryption, salted hashing, and PBKDF2 SHA-256.</value>
<comment>Max 4000 characters</comment>
</data>
<data name="FeatureGraphic" xml:space="preserve">
<value>Tüm aygıtlarınız için güvenli ve ücretsiz bir parola yöneticisi</value>
</data>
<data name="Screenshot1" xml:space="preserve">
<value>Tüm giriş bilgilerinizi ve parolalarınızı güvenli bir kasadan yönetin</value>
</data>
<data name="Screenshot2" xml:space="preserve">
<value>Otomatik olarak güçlü, rastgele ve güvenli parolalar oluşturun</value>
</data>
<data name="Screenshot3" xml:space="preserve">
<value>Protect your vault with fingerprint, PIN code, or master password</value>
</data>
<data name="Screenshot4" xml:space="preserve">
<value>Quickly auto-fill logins from within your web browser and other apps</value>
</data>
<data name="Screenshot5" xml:space="preserve">
<value>Sync and access your vault from multiple devices
- Phone
- Tablet
- Desktop
- Web</value>
</data>
</root>

161
store/google/uk/copy.resx Normal file
View File

@@ -0,0 +1,161 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Title" xml:space="preserve">
<value>bitwarden - Менеджер паролів</value>
<comment>Max 30 characters</comment>
</data>
<data name="ShortDescription" xml:space="preserve">
<value>bitwarden - менеджер паролів, що допомагає вам бути в безпеці онлайн.</value>
<comment>Max 80 characters</comment>
</data>
<data name="FullDesciption" xml:space="preserve">
<value>bitwarden - це найлегший і найбезпечніший спосіб зберігання всіх ваших паролів та зручна їх синхронізація між всіма пристроями.
Викрадання паролів є серйозною проблемою. Веб-сайти й програми, які ви використовуєте, атакуються щодня. При виникненні їх вразливості безпеки всі ваші паролі можуть бути викрадені. Якщо ви використовуєте однаковий пароль для всіх програм та веб-сайтів, хакери можуть з легкістю отримати доступ до вашої електронної пошти, банківських облікових записів та інших важливих даних.
Експерти з цифрової безпеки рекомендують використовувати різні, випадково згенеровані паролі для кожного облікового запису. Але як ви будете керувати всіма цими різними паролями? bitwarden дозволяє вам легко створювати, зберігати й отримувати доступ до ваших паролів.
bitwarden зберігає всі ваші дані в зашифрованому сховищі, яке синхронізується на всіх пристроях. У зв'язку з тим, що ваші дані повністю шифруються ще до того, як покинуть ваш пристрій, лише ви маєте до них доступ. Навіть ми в bitwarden не зможемо прочитати ваші дані, навіть якщо захочемо. Ваші дані зашифровані з використанням алгоритму AES-256 та PBKDF2 SHA-256.</value>
<comment>Max 4000 characters</comment>
</data>
<data name="FeatureGraphic" xml:space="preserve">
<value>Захищений і безкоштовний менеджер паролів для всіх ваших пристроїв</value>
</data>
<data name="Screenshot1" xml:space="preserve">
<value>Керуйте всіма своїми записами в захищеному сховищі</value>
</data>
<data name="Screenshot2" xml:space="preserve">
<value>Автоматично генеруйте стійкі, випадкові та надійні паролі</value>
</data>
<data name="Screenshot3" xml:space="preserve">
<value>Захистіть своє сховище за допомогою відбитку пальця, PIN-коду, або головного пароля</value>
</data>
<data name="Screenshot4" xml:space="preserve">
<value>Швидке автозаповнення паролів у веб-браузері та інших програмах</value>
</data>
<data name="Screenshot5" xml:space="preserve">
<value>Синхронізація і доступ до сховища з різних пристроїв
- Телефон
- Планшет
- Комп'ютер
- Веб-браузер</value>
</data>
</root>