1
0
mirror of https://github.com/bitwarden/mobile synced 2025-12-24 04:04:34 +00:00

Compare commits

..

77 Commits

Author SHA1 Message Date
Kyle Spearrin
2ad55e8a8c New Crowdin translations (#353)
* New translations AppResources.resx (Chinese Simplified)

* New translations AppResources.resx (Persian)

* New translations AppResources.resx (Swedish)

* New translations AppResources.resx (Spanish)

* New translations AppResources.resx (Slovak)

* New translations AppResources.resx (Russian)

* New translations AppResources.resx (Portuguese, Brazilian)

* New translations AppResources.resx (Portuguese)

* New translations AppResources.resx (Polish)

* New translations AppResources.resx (Norwegian Bokmal)

* New translations AppResources.resx (Chinese Traditional)

* New translations AppResources.resx (Japanese)

* New translations AppResources.resx (German)

* New translations AppResources.resx (French)

* New translations AppResources.resx (Estonian)

* New translations AppResources.resx (Dutch)

* New translations AppResources.resx (Danish)

* New translations AppResources.resx (Czech)

* New translations AppResources.resx (Ukrainian)
2018-08-09 17:34:58 -04:00
Kyle Spearrin
a8a1750d5c version bump 2018-08-09 11:48:10 -04:00
Kyle Spearrin
5407e20150 update libs 2018-08-04 00:55:01 -04:00
Kyle Spearrin
58aa37bf8e catch EnableForegroundDispatch exception. disable
back button on yubikey 2fa.
2018-08-01 15:45:32 -04:00
Kyle Spearrin
7c781b60c5 add protocol if missing 2018-08-01 15:32:12 -04:00
Kyle Spearrin
acdfce7e88 support otpath:// totp secrets 2018-07-31 12:34:10 -04:00
Kyle Spearrin
4e4b56d7fe password updated fixes 2018-07-30 22:42:54 -04:00
Kyle Spearrin
a3174d7015 New Crowdin translations (#349)
* New translations AppResources.resx (Bulgarian)

* New translations AppResources.resx (Romanian)

* New translations AppResources.resx (Portuguese, Brazilian)

* New translations AppResources.resx (Portuguese)

* New translations AppResources.resx (Russian)

* New translations AppResources.resx (Polish)

* New translations AppResources.resx (Persian)

* New translations AppResources.resx (Norwegian Bokmal)

* New translations AppResources.resx (Vietnamese)

* New translations AppResources.resx (Ukrainian)

* New translations AppResources.resx (Turkish)

* New translations AppResources.resx (Thai)

* New translations AppResources.resx (Swedish)

* New translations AppResources.resx (Spanish)

* New translations AppResources.resx (Slovak)

* New translations AppResources.resx (Korean)

* New translations AppResources.resx (Czech)

* New translations AppResources.resx (Dutch)

* New translations AppResources.resx (Danish)

* New translations AppResources.resx (Croatian)

* New translations AppResources.resx (Chinese Traditional)

* New translations AppResources.resx (Chinese Simplified)

* New translations AppResources.resx (Estonian)

* New translations AppResources.resx (Japanese)

* New translations AppResources.resx (Italian)

* New translations AppResources.resx (Indonesian)

* New translations AppResources.resx (Hungarian)

* New translations AppResources.resx (Finnish)

* New translations AppResources.resx (Hindi)

* New translations AppResources.resx (German)

* New translations AppResources.resx (French)
2018-07-30 17:14:39 -04:00
Kyle Spearrin
b595c8aeac contrib updates 2018-07-30 17:07:44 -04:00
Kyle Spearrin
a9a33ad71e save password history changes 2018-07-30 16:15:36 -04:00
Kyle Spearrin
4d08ce90cc Merge branch 'master' of github.com:bitwarden/mobile 2018-07-30 13:16:04 -04:00
Kyle Spearrin
01d9ccc110 add password history and updated dates 2018-07-30 13:15:53 -04:00
Jacob
029f069ad5 fetch image from bitwarden/brand (#345) 2018-07-19 10:51:15 -04:00
Kyle Spearrin
13b9e01604 check lock only if locked on all pages 2018-07-16 23:14:45 -04:00
Kyle Spearrin
19c46a472a fix name bug on section group names 2018-07-16 10:24:53 -04:00
Kyle Spearrin
37edfffb97 move last launch check after _lastQueriedUri 2018-07-16 10:17:05 -04:00
Kyle Spearrin
67fa653d06 prevent multiple main activities from autofill 2018-07-16 10:07:22 -04:00
Kyle Spearrin
366b9ddc4a update libs. update android security provider 2018-07-16 08:55:37 -04:00
Kyle Spearrin
c9354f79b8 add escosia browser autofill 2018-07-16 08:40:38 -04:00
Kyle Spearrin
d5b3bd5905 remove no connection alert on appearing of pages 2018-07-12 13:12:42 -04:00
Kyle Spearrin
45dd240415 include some type info with extension exception 2018-06-30 08:55:54 -04:00
Kyle Spearrin
bf99cea004 possible null pointer fix 2018-06-30 08:19:18 -04:00
Kyle Spearrin
f680b1e856 update libs 2018-06-30 00:06:41 -04:00
Kyle Spearrin
b2f40c7af0 fix track bug 2018-06-29 15:26:46 -04:00
Kyle Spearrin
82b17677b9 default track is alpha 2018-06-29 15:24:19 -04:00
Kyle Spearrin
b7df2d5441 rollout track 2018-06-29 15:05:40 -04:00
Kyle Spearrin
dd511ba365 tracks are now strings 2018-06-29 15:04:34 -04:00
Kyle Spearrin
d705e3c1fb version bump 2018-06-29 14:19:35 -04:00
Kyle Spearrin
4bd1322904 update libs 2018-06-29 14:09:53 -04:00
Kyle Spearrin
ac027ee3a0 add support for kiwi browser 2018-06-29 13:48:47 -04:00
Kyle Spearrin
e5e3ebdbba update to Xamarin forms 3.1 2018-06-29 12:45:10 -04:00
Kyle Spearrin
993fc2e6f4 bump version 2018-06-29 10:42:28 -04:00
Kyle Spearrin
61c480618c try to generate key with and without date 2018-06-29 10:39:29 -04:00
Kyle Spearrin
db7f2622c8 org.chromium.chrome support 2018-06-28 23:33:34 -04:00
kspearrin
a39e78a989 increment ios build num 2018-06-19 20:18:07 -04:00
Kyle Spearrin
5a461d68a7 New Crowdin translations (#330)
* New translations AppResources.resx (Chinese Simplified)

* New translations AppResources.resx (Chinese Traditional)

* New translations AppResources.resx (Danish)

* New translations AppResources.resx (Dutch)

* New translations AppResources.resx (Estonian)

* New translations AppResources.resx (German)

* New translations AppResources.resx (Polish)

* New translations AppResources.resx (Portuguese)

* New translations AppResources.resx (Russian)

* New translations AppResources.resx (Spanish)

* New translations AppResources.resx (Ukrainian)
2018-06-19 20:07:48 -04:00
Kyle Spearrin
899816673c change icons server to bitwarden.net 2018-06-19 18:02:49 -04:00
Kyle Spearrin
84a10139c1 designer update 2018-06-19 14:28:31 -04:00
Kyle Spearrin
da3aa56d86 add ko and fa languages 2018-06-18 21:24:29 -04:00
Kyle Spearrin
a6dcd512ea update designer 2018-06-18 15:35:04 -04:00
Kyle Spearrin
572d32c1de New Crowdin translations (#329)
* New translations AppResources.resx (Bulgarian)

* New translations copy.resx (Romanian)

* New translations AppResources.resx (Romanian)

* New translations AppResources.resx (Portuguese, Brazilian)

* New translations AppResources.resx (Portuguese)

* New translations AppResources.resx (Russian)

* New translations AppResources.resx (Polish)

* New translations copy.resx (Persian)

* New translations copy.resx (Persian)

* New translations AppResources.resx (Persian)

* New translations AppResources.resx (Norwegian Bokmal)

* New translations copy.resx (Korean)

* New translations copy.resx (Korean)

* New translations copy.resx (Romanian)

* New translations copy.resx (Vietnamese)

* New translations AppResources.resx (Vietnamese)

* New translations AppResources.resx (Ukrainian)

* New translations AppResources.resx (Turkish)

* New translations AppResources.resx (Thai)

* New translations AppResources.resx (Swedish)

* New translations AppResources.resx (Spanish)

* New translations AppResources.resx (Slovak)

* New translations AppResources.resx (Korean)

* New translations AppResources.resx (Czech)

* New translations copy.resx (Dutch)

* New translations copy.resx (Dutch)

* New translations AppResources.resx (Dutch)

* New translations AppResources.resx (Danish)

* New translations copy.resx (Czech)

* New translations copy.resx (Czech)

* New translations AppResources.resx (Croatian)

* New translations AppResources.resx (Chinese Traditional)

* New translations AppResources.resx (Chinese Simplified)

* New translations AppResources.resx (Estonian)

* New translations AppResources.resx (Japanese)

* New translations AppResources.resx (Italian)

* New translations AppResources.resx (Indonesian)

* New translations AppResources.resx (Hungarian)

* New translations AppResources.resx (Finnish)

* New translations AppResources.resx (Hindi)

* New translations AppResources.resx (German)

* New translations AppResources.resx (French)

* New translations copy.resx (Vietnamese)
2018-06-18 15:30:24 -04:00
Kyle Spearrin
e8b67ead1e version bump 2018-06-18 15:23:11 -04:00
Kyle Spearrin
377029226e allow non-nfc keys on android 2018-06-18 14:10:43 -04:00
Kyle Spearrin
72d1421f1d shows both accessibility and autofill from tools 2018-06-18 13:59:56 -04:00
Kyle Spearrin
d359547dab monospace fonts for card code 2018-06-18 09:12:03 -04:00
Neil Burrows
9523c7ab33 Card Security Code masked (bitwarden/desktop issue 78) (#328)
* Card Security Code masked in the same way as Passwords. (bitwarden/desktop issue 78)

By default shows Card Security Code masked in the same way as Passwords. (bitwarden/desktop issue 78)

* Creating property to store value of Masked Card Code Shown
2018-06-18 09:00:45 -04:00
Kyle Spearrin
7cac07c185 add pbkdf2 key stretching 2018-06-13 22:41:18 -04:00
Kyle Spearrin
a607a7f3ef clear cache flag on disk 2018-06-08 09:13:42 -04:00
Kyle Spearrin
b5277e89d5 add bromite autofill support 2018-06-08 08:59:54 -04:00
kspearrin
99713f8ed7 remove password generate event on disappear 2018-06-05 11:13:15 -04:00
Kyle Spearrin
145dac500c appresources for ios yubikey 2018-06-04 21:08:55 -04:00
kspearrin
eefd9bf31c update yubikey options for ios 2018-06-04 21:06:17 -04:00
Kyle Spearrin
3f47ca645b iphone yubikey images 2018-06-04 21:02:20 -04:00
Kyle Spearrin
c906f037b5 checked for locked state on activity resume.
resolves #319
2018-06-04 09:20:38 -04:00
Kyle Spearrin
ffc4e32119 run cloc on install 2018-06-01 14:45:56 -04:00
Kyle Spearrin
51eb46241b Revert "previous 2017"
This reverts commit 541416f64b.
2018-05-29 15:54:57 -04:00
Kyle Spearrin
541416f64b previous 2017 2018-05-29 15:47:39 -04:00
Kyle Spearrin
14d1d132a3 dont set key validity dates 2018-05-29 15:21:43 -04:00
Kyle Spearrin
22a0045796 try again button for ios yubikey 2018-05-24 22:43:59 -04:00
Kyle Spearrin
2e5ba0335d hide yubikey token cell for ios 2018-05-24 22:40:02 -04:00
Kyle Spearrin
3315704c14 cleanup 2018-05-24 22:34:17 -04:00
Kyle Spearrin
f90c407fb6 move nfc delegate to member of appdelegate class 2018-05-24 22:33:29 -04:00
Kyle Spearrin
d3646e10a5 clearup yubikey reading on ios 2018-05-24 15:34:09 -04:00
Kyle Spearrin
d3003efe72 remove nfc from extension 2018-05-24 14:01:00 -04:00
Kyle Spearrin
235ca947be turn on nfc in plist 2018-05-24 13:50:11 -04:00
Kyle Spearrin
e7bc9ed5ba nfc updates 2018-05-24 12:49:22 -04:00
Kyle Spearrin
740a18dbc0 stub out yubico nfc support for ios 2018-05-24 11:41:57 -04:00
Kyle Spearrin
add5189bb1 add via to oreo trusted browsers 2018-05-21 23:26:54 -04:00
Kyle Spearrin
62002b8bb3 disable test nodes 2018-05-21 22:53:32 -04:00
Kyle Spearrin
41b4ee33fe adjust max_aspect ratio for samsung full screen 2018-05-20 10:14:54 -04:00
Kyle Spearrin
85c67ac676 version bump 2018-05-18 21:42:51 -04:00
Kyle Spearrin
4637b7d93f update fingerprint lib 2018-04-28 00:25:58 -04:00
Kyle Spearrin
8b9a178c87 faceid description in info.plist 2018-04-28 00:23:31 -04:00
Kyle Spearrin
c595c381a9 bump android version 2018-04-26 00:06:43 -04:00
Kyle Spearrin
c308d7a610 look for password fields from HtmlInfo attributes 2018-04-26 00:04:07 -04:00
Kyle Spearrin
f7570122c6 ignore "edit" fields on autofill 2018-04-26 00:04:07 -04:00
Kyle Spearrin
1e5f186b58 Search Login URI as well 2018-04-26 00:04:07 -04:00
127 changed files with 8047 additions and 4374 deletions

View File

@@ -8,6 +8,6 @@ We use a translation tool called [Crowdin](https://crowdin.com) to help manage o
If you are interested in helping translate the Bitwarden mobile app into another language (or make a translation correction), please register an account at Crowdin and join our project here: https://crowdin.com/project/bitwarden-mobile
If the language that you are interested in translating is not already listed, create a new account on Crowdin, join the project, and contact the project owner (https://crowdin.com/mail/compose/kspearrin).
If the language that you are interested in translating is not already listed, create a new account on Crowdin, join the project, and contact the project owner (https://crowdin.com/profile/kspearrin).
You can read Crowdin's getting started guide for translators here: https://support.crowdin.com/crowdin-intro/

View File

@@ -8,7 +8,7 @@
The Bitwarden mobile application is written in C# with Xamarin Android, Xamarin iOS, UWP, and Xamarin Forms.
<img src="https://i.imgur.com/R7H2tkQ.png" alt="" width="300" height="533" /> <img src="https://i.imgur.com/3BO1Wcg.png" alt="" width="300" height="533" />
<img src="https://raw.githubusercontent.com/bitwarden/brand/master/screenshots/mobile-android.png" alt="" width="300" height="533" /> <img src="https://raw.githubusercontent.com/bitwarden/brand/master/screenshots/mobile-ios.png" alt="" width="300" height="533" />
# Build/Run

View File

@@ -1,4 +1,6 @@
#install:
install:
- choco install cloc --no-progress
- "cloc --vcs git --exclude-dir Resources,store,test,UWP,Properties --include-lang C#,JavaScript,TypeScript,PowerShell"
# - appveyor DownloadFile https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
# - appveyor DownloadFile https://aka.ms/vs/15/release/vs_community.exe
# - vs_community.exe update --wait --quiet --norestart --installPath "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community"

View File

@@ -15,7 +15,7 @@
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
<AndroidUseLatestPlatformSdk>false</AndroidUseLatestPlatformSdk>
<TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v8.1</TargetFrameworkVersion>
<AndroidSupportedAbis>armeabi,armeabi-v7a,x86</AndroidSupportedAbis>
<AndroidHttpClientHandlerType>Xamarin.Android.Net.AndroidClientHandler</AndroidHttpClientHandlerType>
<AndroidStoreUncompressedFileExtensions />
@@ -858,20 +858,35 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Xamarin.Firebase.Messaging">
<Version>42.1021.1</Version>
<Version>60.1142.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.GooglePlayServices.Analytics">
<Version>42.1021.1</Version>
<Version>60.1142.1</Version>
</PackageReference>
<PackageReference Include="SimpleInjector">
<Version>4.0.12</Version>
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Design">
<Version>27.0.2.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.v4">
<Version>27.0.2.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.v7.AppCompat">
<Version>25.4.0.2</Version>
<Version>27.0.2.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.v7.CardView">
<Version>27.0.2.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.v7.MediaRouter">
<Version>27.0.2.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.GooglePlayServices.SafetyNet">
<Version>60.1142.1</Version>
</PackageReference>
<PackageReference Include="XLabs.IoC.SimpleInjector" Version="2.0.5782" />
<PackageReference Include="Portable.BouncyCastle" Version="1.8.1.3" />
<PackageReference Include="Plugin.CurrentActivity" Version="1.0.1" />
<PackageReference Include="Portable.BouncyCastle" Version="1.8.2" />
<PackageReference Include="Plugin.CurrentActivity" Version="2.1.0.4" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\bottom_nav_bg.xml" />
@@ -990,5 +1005,20 @@
<ItemGroup>
<AndroidResource Include="Resources\drawable-xxxhdpi\icon.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\upload2.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-hdpi\upload2.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xhdpi\upload2.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xxhdpi\upload2.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xxxhdpi\upload2.png" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
</Project>

View File

@@ -11,7 +11,7 @@ namespace Bit.Android.Autofill
{
private List<Field> _passwordFields = null;
private List<Field> _usernameFields = null;
private HashSet<string> _ignoreSearchTerms = new HashSet<string> { "search", "find", "recipient" };
private HashSet<string> _ignoreSearchTerms = new HashSet<string> { "search", "find", "recipient", "edit" };
private HashSet<string> _passwordTerms = new HashSet<string> { "password", "pswd" };
public List<AutofillId> AutofillIds { get; private set; } = new List<AutofillId>();
@@ -304,6 +304,20 @@ namespace Bit.Android.Autofill
f.InputType.HasFlag(InputTypes.TextVariationVisiblePassword) ||
f.InputType.HasFlag(InputTypes.TextVariationWebPassword);
if(!inputTypePassword && f.HtmlInfo != null && f.HtmlInfo.Tag == "input" &&
(f.HtmlInfo.Attributes?.Any() ?? false))
{
foreach(var a in f.HtmlInfo.Attributes)
{
var key = a.First as Java.Lang.String;
var val = a.Second as Java.Lang.String;
if(key != null && val != null && key.ToString() == "type" && val.ToString() == "password")
{
return true;
}
}
}
return inputTypePassword && !ValueContainsAnyTerms(f.IdEntry, _ignoreSearchTerms) &&
!ValueContainsAnyTerms(f.Hint, _ignoreSearchTerms);
}

View File

@@ -14,7 +14,8 @@ namespace Bit.Android.Autofill
"com.opera.browser.beta","com.opera.mini.native","com.chrome.dev","com.chrome.canary",
"com.google.android.apps.chrome","com.google.android.apps.chrome_dev","com.yandex.browser",
"com.sec.android.app.sbrowser","com.sec.android.app.sbrowser.beta","org.codeaurora.swe.browser",
"com.amazon.cloud9","org.mozilla.klar", "com.duckduckgo.mobile.android"
"com.amazon.cloud9","org.mozilla.klar","com.duckduckgo.mobile.android","mark.via.gp","org.bromite.bromite",
"org.chromium.chrome", "com.kiwibrowser.browser", "com.ecosia.android"
};
public static HashSet<string> ExcludedPackageIds = new HashSet<string>

View File

@@ -3,12 +3,14 @@ using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using System;
namespace Bit.Android
{
[Activity(Theme = "@style/BitwardenTheme.Splash", WindowSoftInputMode = SoftInput.StateHidden)]
public class AutofillActivity : Activity
{
private DateTime? _lastLaunch = null;
private string _lastQueriedUri;
public static AutofillCredentials LastCredentials { get; set; }
@@ -90,6 +92,13 @@ namespace Bit.Android
return;
}
var now = DateTime.UtcNow;
if(_lastLaunch.HasValue && (now - _lastLaunch.Value <= TimeSpan.FromSeconds(2)))
{
return;
}
_lastLaunch = now;
var intent = new Intent(this, typeof(MainActivity));
if(!callingIntent.Flags.HasFlag(ActivityFlags.LaunchedFromHistory))
{

View File

@@ -29,6 +29,7 @@ namespace Bit.Android
{
new Browser("com.android.chrome", "url_bar"),
new Browser("com.chrome.beta", "url_bar"),
new Browser("org.chromium.chrome", "url_bar"),
new Browser("com.android.browser", "url"),
new Browser("com.brave.browser", "url_bar"),
new Browser("com.opera.browser", "url_field"),
@@ -63,7 +64,10 @@ namespace Bit.Android
new Browser("acr.browser.barebones", "search"),
new Browser("com.microsoft.emmx", "url_bar"),
new Browser("com.duckduckgo.mobile.android", "omnibarTextInput"),
new Browser("mark.via.gp", "aw")
new Browser("mark.via.gp", "aw"),
new Browser("org.bromite.bromite", "url_bar"),
new Browser("com.kiwibrowser.browser", "url_bar"),
new Browser("com.ecosia.android", "url_bar"),
}.ToDictionary(n => n.PackageName);
// Known packages to skip
@@ -123,9 +127,8 @@ namespace Bit.Android
return;
}
var testNodes = GetWindowNodes(root, e, n => n.ViewIdResourceName != null && n.Text != null, false);
var testNodesData = testNodes.Select(n => new { id = n.ViewIdResourceName, text = n.Text });
testNodes.Dispose();
//var testNodes = GetWindowNodes(root, e, n => n.ViewIdResourceName != null && n.Text != null, false);
//var testNodesData = testNodes.Select(n => new { id = n.ViewIdResourceName, text = n.Text });
var notificationManager = (NotificationManager)GetSystemService(NotificationService);
var cancelNotification = true;

View File

@@ -112,7 +112,7 @@ namespace Bit.Android.Controls
private void Control_EditorAction(object sender, TextView.EditorActionEventArgs e)
{
if(_view.ReturnType != ReturnType.Next)
if(_view.TargetReturnType != Bit.App.Enums.ReturnType.Next)
{
_view.Unfocus();
}
@@ -165,23 +165,23 @@ namespace Bit.Android.Controls
private void SetReturnType(ExtendedEntry view)
{
if(view.ReturnType.HasValue)
if(view.TargetReturnType.HasValue)
{
switch(view.ReturnType.Value)
switch(view.TargetReturnType.Value)
{
case ReturnType.Go:
case App.Enums.ReturnType.Go:
Control.ImeOptions = ImeAction.Go;
Control.SetImeActionLabel("Go", ImeAction.Go);
break;
case ReturnType.Next:
case App.Enums.ReturnType.Next:
Control.ImeOptions = ImeAction.Next;
Control.SetImeActionLabel("Next", ImeAction.Next);
break;
case ReturnType.Search:
case App.Enums.ReturnType.Search:
Control.ImeOptions = ImeAction.Search;
Control.SetImeActionLabel("Search", ImeAction.Search);
break;
case ReturnType.Send:
case App.Enums.ReturnType.Send:
Control.ImeOptions = ImeAction.Send;
Control.SetImeActionLabel("Send", ImeAction.Send);
break;
@@ -206,7 +206,7 @@ namespace Bit.Android.Controls
private void SetMaxLength(ExtendedEntry view)
{
Control.SetFilters(new IInputFilter[] { new InputFilterLengthFilter(view.MaxLength) });
Control.SetFilters(new IInputFilter[] { new InputFilterLengthFilter(view.TargetMaxLength) });
}
}
}

View File

@@ -27,6 +27,8 @@ namespace Bit.Android
private const string HockeyAppId = "d3834185b4a643479047b86c65293d42";
private Java.Util.Regex.Pattern _otpPattern = Java.Util.Regex.Pattern.Compile("^.*?([cbdefghijklnrtuv]{32,64})$");
private IDeviceActionService _deviceActionService;
private IDeviceInfoService _deviceInfoService;
private IAppSettingsService _appSettingsService;
private ISettings _settings;
private AppOptions _appOptions;
@@ -69,6 +71,8 @@ namespace Bit.Android
.SetValue(null, Color.FromHex("d2d6de"));
_deviceActionService = Resolver.Resolve<IDeviceActionService>();
_deviceInfoService = Resolver.Resolve<IDeviceInfoService>();
_appSettingsService = Resolver.Resolve<IAppSettingsService>();
_settings = Resolver.Resolve<ISettings>();
_appOptions = GetOptions();
LoadApplication(new App.App(
@@ -81,7 +85,7 @@ namespace Bit.Android
Resolver.Resolve<ILockService>(),
Resolver.Resolve<ILocalizeService>(),
Resolver.Resolve<IAppInfoService>(),
Resolver.Resolve<IAppSettingsService>(),
_appSettingsService,
_deviceActionService));
if(_appOptions?.Uri == null)
@@ -134,7 +138,7 @@ namespace Bit.Android
// ref https://bugzilla.xamarin.com/show_bug.cgi?id=36907
Task.Delay(10).Wait();
if(Utilities.NfcEnabled())
if(_deviceInfoService.NfcEnabled)
{
try
{
@@ -145,6 +149,11 @@ namespace Bit.Android
System.Diagnostics.Debug.WriteLine(e);
}
}
if(_appSettingsService.Locked)
{
MessagingCenter.Send(Xamarin.Forms.Application.Current, "Resumed", false);
}
}
protected override void OnNewIntent(Intent intent)
@@ -206,7 +215,7 @@ namespace Bit.Android
private void ListenYubiKey(bool listen)
{
if(!Utilities.NfcEnabled())
if(!_deviceInfoService.NfcEnabled)
{
return;
}
@@ -224,8 +233,12 @@ namespace Bit.Android
ndef.AddDataScheme("https");
var filters = new IntentFilter[] { ndef };
// register for foreground dispatch so we'll receive tags according to our intent filters
adapter.EnableForegroundDispatch(this, pendingIntent, filters, null);
try
{
// register for foreground dispatch so we'll receive tags according to our intent filters
adapter.EnableForegroundDispatch(this, pendingIntent, filters, null);
}
catch { }
}
else
{

View File

@@ -13,9 +13,9 @@ using Plugin.Fingerprint;
using Plugin.Settings;
using XLabs.Ioc;
using System.Threading.Tasks;
using FFImageLoading.Forms.Droid;
using XLabs.Ioc.SimpleInjectorContainer;
using SimpleInjector;
using Android.Gms.Security;
namespace Bit.Android
{
@@ -24,13 +24,11 @@ namespace Bit.Android
#else
[Application(Debuggable = false)]
#endif
public class MainApplication : Application, Application.IActivityLifecycleCallbacks
public class MainApplication : Application, ProviderInstaller.IProviderInstallListener
{
private const string FirstLaunchKey = "firstLaunch";
private const string LastVersionCodeKey = "lastVersionCode";
public static Context AppContext;
public MainApplication(IntPtr handle, JniHandleOwnership transer)
: base(handle, transer)
{
@@ -40,6 +38,11 @@ namespace Bit.Android
{
SetIoc(this);
}
if(Build.VERSION.SdkInt <= BuildVersionCodes.Kitkat)
{
ProviderInstaller.InstallIfNeededAsync(ApplicationContext, this);
}
}
private void AndroidEnvironment_UnhandledExceptionRaiser(object sender, RaiseThrowableEventArgs e)
@@ -56,52 +59,13 @@ namespace Bit.Android
// workaround for app compat bug
// ref https://forums.xamarin.com/discussion/62414/app-resuming-results-in-crash-with-formsappcompatactivity
Task.Delay(10).Wait();
RegisterActivityLifecycleCallbacks(this);
AppContext = ApplicationContext;
}
public override void OnTerminate()
{
base.OnTerminate();
UnregisterActivityLifecycleCallbacks(this);
}
public void OnActivityCreated(Activity activity, Bundle savedInstanceState)
{
CrossCurrentActivity.Current.Activity = activity;
}
public void OnActivityDestroyed(Activity activity)
{
}
public void OnActivityPaused(Activity activity)
{
}
public void OnActivityResumed(Activity activity)
{
CrossCurrentActivity.Current.Activity = activity;
}
public void OnActivitySaveInstanceState(Activity activity, Bundle outState)
{
}
public void OnActivityStarted(Activity activity)
{
CrossCurrentActivity.Current.Activity = activity;
}
public void OnActivityStopped(Activity activity)
{
CrossCurrentActivity.Current.Init(this);
}
public static void SetIoc(Application application)
{
Refractored.FabControl.Droid.FloatingActionButtonViewRenderer.Init();
CachedImageRenderer.Init(true);
FFImageLoading.Forms.Platform.CachedImageRenderer.Init(true);
ZXing.Net.Mobile.Forms.Android.Platform.Init();
CrossFingerprint.SetCurrentActivityResolver(() => CrossCurrentActivity.Current.Activity);
@@ -109,8 +73,8 @@ namespace Bit.Android
var container = new Container();
// Android Stuff
container.RegisterSingleton(application.ApplicationContext);
container.RegisterSingleton<Application>(application);
container.RegisterInstance(application.ApplicationContext);
container.RegisterInstance<Application>(application);
// Services
container.RegisterSingleton<IDatabaseService, DatabaseService>();
@@ -158,9 +122,9 @@ namespace Bit.Android
container.RegisterSingleton<ICipherCollectionRepository, CipherCollectionRepository>();
// Other
container.RegisterSingleton(CrossSettings.Current);
container.RegisterSingleton(CrossConnectivity.Current);
container.RegisterSingleton(CrossFingerprint.Current);
container.RegisterInstance(CrossSettings.Current);
container.RegisterInstance(CrossConnectivity.Current);
container.RegisterInstance(CrossFingerprint.Current);
// Push
#if FDROID
@@ -174,5 +138,13 @@ namespace Bit.Android
container.Verify();
Resolver.SetResolver(new SimpleInjectorResolver(container));
}
public void OnProviderInstallFailed(int errorCode, Intent recoveryIntent)
{
}
public void OnProviderInstalled()
{
}
}
}

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.x8bit.bitwarden" android:versionName="1.16.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.18.0" android:installLocation="auto" android:versionCode="502" xmlns:tools="http://schemas.android.com/tools">
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.INTERNET" />
@@ -31,10 +31,11 @@
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="${applicationId}" />
<category android:name="com.x8bit.bitwarden" />
</intent-filter>
</receiver>
<activity android:name="net.hockeyapp.android.UpdateActivity" android:exported="false" />
<meta-data android:name="android.max_aspect" android:value="2.1" />
</application>
</manifest>

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 B

View File

@@ -44,7 +44,15 @@ namespace Bit.Android.Services
_keyStore = KeyStore.GetInstance(AndroidKeyStore);
_keyStore.Load(null);
GenerateStoreKey();
try
{
GenerateStoreKey(true);
}
catch
{
GenerateStoreKey(false);
}
GenerateAesKey();
}
@@ -128,7 +136,7 @@ namespace Bit.Android.Services
}
}
private void GenerateStoreKey()
private void GenerateStoreKey(bool withDate)
{
if(_keyStore.ContainsAlias(KeyAlias))
{
@@ -144,27 +152,33 @@ namespace Bit.Android.Services
{
var subject = new X500Principal($"CN={KeyAlias}");
var spec = new KeyPairGeneratorSpec.Builder(Application.Context)
var builder = new KeyPairGeneratorSpec.Builder(Application.Context)
.SetAlias(KeyAlias)
.SetSubject(subject)
.SetSerialNumber(BigInteger.Ten)
.SetStartDate(new Date(0))
.SetEndDate(end.Time)
.Build();
.SetSerialNumber(BigInteger.Ten);
if(withDate)
{
builder.SetStartDate(new Date(0)).SetEndDate(end.Time);
}
var spec = builder.Build();
var gen = KeyPairGenerator.GetInstance(KeyProperties.KeyAlgorithmRsa, AndroidKeyStore);
gen.Initialize(spec);
gen.GenerateKeyPair();
}
else
{
var spec = new KeyGenParameterSpec.Builder(KeyAlias, KeyStorePurpose.Decrypt | KeyStorePurpose.Encrypt)
var builder = new KeyGenParameterSpec.Builder(KeyAlias, KeyStorePurpose.Decrypt | KeyStorePurpose.Encrypt)
.SetBlockModes(KeyProperties.BlockModeGcm)
.SetEncryptionPaddings(KeyProperties.EncryptionPaddingNone)
.SetKeyValidityStart(new Date(0))
.SetKeyValidityEnd(end.Time)
.Build();
.SetEncryptionPaddings(KeyProperties.EncryptionPaddingNone);
if(withDate)
{
builder.SetKeyValidityStart(new Date(0)).SetKeyValidityEnd(end.Time);
}
var spec = builder.Build();
var gen = KeyGenerator.GetInstance(KeyProperties.KeyAlgorithmAes, AndroidKeyStore);
gen.Init(spec);
gen.GenerateKey();

View File

@@ -1,5 +1,7 @@
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Nfc;
using Android.OS;
using Android.Views.Autofill;
using Bit.App.Abstractions;
@@ -45,7 +47,7 @@ namespace Bit.Android.Services
return 1f;
}
}
public bool NfcEnabled => Utilities.NfcEnabled();
public bool NfcEnabled => NfcIsEnabled();
public bool HasCamera => CrossCurrentActivity.Current.Activity.PackageManager.HasSystemFeature(
PackageManager.FeatureCamera);
public bool AutofillServiceSupported => AutofillSupported();
@@ -56,10 +58,17 @@ namespace Bit.Android.Services
{
return false;
}
var afm = (AutofillManager)CrossCurrentActivity.Current.Activity.GetSystemService(
Java.Lang.Class.FromType(typeof(AutofillManager)));
return afm.IsAutofillSupported;
}
public bool NfcIsEnabled()
{
var activity = CrossCurrentActivity.Current.Activity;
var manager = (NfcManager)activity.GetSystemService(Context.NfcService);
var adapter = manager.DefaultAdapter;
return adapter != null && adapter.IsEnabled;
}
}
}

View File

@@ -3,20 +3,12 @@ using Android.App;
using Android.Content;
using Java.Security;
using System.IO;
using Android.Nfc;
using Android.Provider;
namespace Bit.Android
{
public static class Utilities
{
public static bool NfcEnabled()
{
var manager = (NfcManager)Application.Context.GetSystemService("nfc");
var adapter = manager.DefaultAdapter;
return adapter != null && adapter.IsEnabled;
}
public static void SendCrashEmail(Exception e, bool includeSecurityProviders = true)
{
SendCrashEmail(e.Message + "\n\n" + e.StackTrace, includeSecurityProviders);

View File

@@ -17,5 +17,6 @@ namespace Bit.App.Abstractions
string ApiUrl { get; set; }
string IdentityUrl { get; set; }
string IconsUrl { get; set; }
bool ClearCiphersCache { get; set; }
}
}

View File

@@ -7,8 +7,8 @@ namespace Bit.App.Abstractions
public interface ILockService
{
void UpdateLastActivity();
Task<LockType> GetLockTypeAsync(bool forceLock);
Task CheckLockAsync(bool forceLock);
Task<LockType> GetLockTypeAsync(bool forceLock, bool onlyIfAlreadyLocked = false);
Task CheckLockAsync(bool forceLock, bool onlyIfAlreadyLocked = false);
bool TopPageIsLock();
}
}

View File

@@ -78,14 +78,14 @@ namespace Bit.App
MainPage = new ExtendedNavigationPage(new HomePage());
}
if(Device.RuntimePlatform == Device.iOS)
MessagingCenter.Subscribe<Application, bool>(Current, "Resumed", async (sender, forceLock) =>
{
MessagingCenter.Subscribe<Application, bool>(Current, "Resumed", async (sender, forceLock) =>
Device.BeginInvokeOnMainThread(async () => await _lockService.CheckLockAsync(forceLock));
if(Device.RuntimePlatform == Device.iOS)
{
Device.BeginInvokeOnMainThread(async () => await _lockService.CheckLockAsync(forceLock));
await Task.Run(() => FullSyncAsync()).ConfigureAwait(false);
});
}
}
});
}
protected async override void OnStart()

View File

@@ -15,10 +15,6 @@
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)' == 'FDroid|net471|AnyCPU'">
<DefineConstants>TRACE;FDROID;NET471</DefineConstants>
</PropertyGroup>
<ItemGroup>
<EmbeddedResource Remove="Resources\AppResources.fa.resx" />
</ItemGroup>
<ItemGroup>
<None Remove="Resources\public_suffix_list.dat" />
@@ -29,17 +25,17 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="HockeySDK.Xamarin" Version="5.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
<PackageReference Include="HockeySDK.Xamarin" Version="5.1.2" />
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
<PackageReference Include="PCLCrypto" Version="2.0.147" />
<PackageReference Include="Plugin.Fingerprint" Version="1.4.6-beta4" />
<PackageReference Include="Plugin.Fingerprint" Version="1.4.7" />
<PackageReference Include="Refractored.FloatingActionButtonForms" Version="2.1.0" />
<PackageReference Include="sqlite-net-pcl" Version="1.5.166-beta" />
<PackageReference Include="System.Net.Http" Version="4.3.3" />
<PackageReference Include="Xam.Plugin.Connectivity" Version="3.0.3" />
<PackageReference Include="Xam.Plugin.Connectivity" Version="3.2.0" />
<PackageReference Include="Xam.Plugins.Settings" Version="3.1.1" />
<PackageReference Include="Xamarin.FFImageLoading.Forms" Version="2.3.4" />
<PackageReference Include="Xamarin.Forms" Version="2.5.0.122203" />
<PackageReference Include="Xamarin.FFImageLoading.Forms" Version="2.4.3.840" />
<PackageReference Include="Xamarin.Forms" Version="3.1.0.697729" />
<PackageReference Include="XLabs.IoC" Version="2.0.5782" />
<PackageReference Include="ZXing.Net.Mobile.Forms" Version="2.1.47" />
</ItemGroup>

View File

@@ -46,6 +46,7 @@
public const string IdentityUrl = "other:identityUrl";
public const string IconsUrl = "other:iconsUrl";
public const string FailedPinAttempts = "other:failedPinAttempts";
public const string ClearCiphersCache = "other:clearCiphersCache";
public const int SelectFileRequestCode = 42;
public const int SelectFilePermissionRequestCode = 43;

View File

@@ -30,7 +30,7 @@ namespace Bit.App.Controls
BackgroundColor = Color.FromHex("efeff4");
}
protected override void OnAppearing()
protected async override void OnAppearing()
{
if(_requireAuth && !_authService.IsAuthenticated)
{
@@ -52,6 +52,7 @@ namespace Bit.App.Controls
}
_googleAnalyticsService.TrackPage(GetType().Name);
await _lockService.CheckLockAsync(false, true);
base.OnAppearing();
}

View File

@@ -25,8 +25,8 @@ namespace Bit.App.Controls
public static readonly BindableProperty BottomBorderColorProperty =
BindableProperty.Create(nameof(BottomBorderColor), typeof(Color), typeof(ExtendedEntry), Color.Default);
public static readonly BindableProperty MaxLengthProperty =
BindableProperty.Create(nameof(MaxLength), typeof(int), typeof(ExtendedEntry), int.MaxValue);
public static readonly BindableProperty TargetMaxLengthProperty =
BindableProperty.Create(nameof(TargetMaxLength), typeof(int), typeof(ExtendedEntry), int.MaxValue);
public bool HasBorder
{
@@ -46,13 +46,13 @@ namespace Bit.App.Controls
set { SetValue(BottomBorderColorProperty, value); }
}
public int MaxLength
public int TargetMaxLength
{
get { return (int)GetValue(MaxLengthProperty); }
set { SetValue(MaxLengthProperty, value); }
get { return (int)GetValue(TargetMaxLengthProperty); }
set { SetValue(TargetMaxLengthProperty, value); }
}
public ReturnType? ReturnType { get; set; }
public Enums.ReturnType? TargetReturnType { get; set; }
public bool? Autocorrect { get; set; }
public bool DisableAutocapitalize { get; set; }
public bool AllowClear { get; set; }

View File

@@ -171,11 +171,11 @@ namespace Bit.App.Controls
_nextElement = value;
if(_nextElement != null && Entry != null)
{
Entry.ReturnType = Enums.ReturnType.Next;
Entry.TargetReturnType = Enums.ReturnType.Next;
}
else if(Entry != null)
{
Entry.ReturnType = null;
Entry.TargetReturnType = null;
}
}
}

View File

@@ -20,7 +20,7 @@ namespace Bit.App.Controls
Entry = new ExtendedEntry
{
Keyboard = Keyboard.Numeric,
MaxLength = 4,
TargetMaxLength = 4,
HideCursor = true
};

View File

@@ -13,12 +13,14 @@ namespace Bit.App.Models.Api
Uris = cipher.Login.Uris?.Select(u => new LoginUriType(u));
Username = cipher.Login.Username?.EncryptedString;
Password = cipher.Login.Password?.EncryptedString;
PasswordRevisionDate = cipher.Login.PasswordRevisionDate;
Totp = cipher.Login.Totp?.EncryptedString;
}
public IEnumerable<LoginUriType> Uris { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public System.DateTime? PasswordRevisionDate { get; set; }
public string Totp { get; set; }
}
}

View File

@@ -20,6 +20,11 @@ namespace Bit.App.Models.Api
Fields = cipher.Fields.Select(f => new FieldType(f));
}
if(cipher.PasswordHistory != null)
{
PasswordHistory = cipher.PasswordHistory.Select(h => new PasswordHistoryRequest(h));
}
switch(Type)
{
case CipherType.Login:
@@ -46,6 +51,7 @@ namespace Bit.App.Models.Api
public string Name { get; set; }
public string Notes { get; set; }
public IEnumerable<FieldType> Fields { get; set; }
public IEnumerable<PasswordHistoryRequest> PasswordHistory { get; set; }
public LoginType Login { get; set; }
public CardType Card { get; set; }

View File

@@ -0,0 +1,14 @@
namespace Bit.App.Models.Api
{
public class PasswordHistoryRequest
{
public PasswordHistoryRequest(PasswordHistory ph)
{
Password = ph.Password?.EncryptedString;
LastUsedDate = ph.LastUsedDate;
}
public string Password { get; set; }
public System.DateTime LastUsedDate { get; set; }
}
}

View File

@@ -22,6 +22,7 @@ namespace Bit.App.Models.Api
public SecureNoteType SecureNote { get; set; }
public IEnumerable<FieldType> Fields { get; set; }
public IEnumerable<AttachmentResponse> Attachments { get; set; }
public IEnumerable<PasswordHistoryResponse> PasswordHistory { get; set; }
public IEnumerable<string> CollectionIds { get; set; }
public DateTime RevisionDate { get; set; }
}

View File

@@ -0,0 +1,8 @@
namespace Bit.App.Models.Api
{
public class PasswordHistoryResponse
{
public string Password { get; set; }
public System.DateTime LastUsedDate { get; set; }
}
}

View File

@@ -24,6 +24,7 @@ namespace Bit.App.Models
Edit = data.Edit;
OrganizationUseTotp = data.OrganizationUseTotp;
Attachments = attachments?.Select(a => new Attachment(a));
RevisionDate = data.RevisionDateTime;
switch(Type)
{
@@ -52,6 +53,17 @@ namespace Bit.App.Models
}
catch(JsonSerializationException) { }
}
if(!string.IsNullOrWhiteSpace(data.PasswordHistory))
{
try
{
var phModels = JsonConvert.DeserializeObject<IEnumerable<PasswordHistoryDataModel>>(
data.PasswordHistory);
PasswordHistory = phModels?.Select(f => new PasswordHistory(f));
}
catch(JsonSerializationException) { }
}
}
public string Id { get; set; }
@@ -62,14 +74,19 @@ namespace Bit.App.Models
public CipherString Name { get; set; }
public CipherString Notes { get; set; }
public IEnumerable<Field> Fields { get; set; }
public IEnumerable<PasswordHistory> PasswordHistory { get; set; }
public bool Favorite { get; set; }
public bool Edit { get; set; }
public bool OrganizationUseTotp { get; set; }
public IEnumerable<Attachment> Attachments { get; set; }
public System.DateTime RevisionDate { get; set; }
public Login Login { get; set; }
public Identity Identity { get; set; }
public Card Card { get; set; }
public SecureNote SecureNote { get; set; }
public System.DateTime? PasswordRevisionDisplayDate =>
Login?.Password == null ? null : Login.PasswordRevisionDate;
}
}

View File

@@ -64,6 +64,16 @@ namespace Bit.App.Models.Data
}
catch(JsonSerializationException) { }
}
if(cipher.PasswordHistory != null && cipher.PasswordHistory.Any())
{
try
{
PasswordHistory = JsonConvert.SerializeObject(
cipher.PasswordHistory.Select(h => new PasswordHistoryDataModel(h)));
}
catch(JsonSerializationException) { }
}
}
[PrimaryKey]
@@ -75,6 +85,7 @@ namespace Bit.App.Models.Data
public string Name { get; set; }
public string Notes { get; set; }
public string Fields { get; set; }
public string PasswordHistory { get; set; }
public string Login { get; set; }
public string Card { get; set; }
public string Identity { get; set; }

View File

@@ -13,10 +13,12 @@ namespace Bit.App.Models.Data
Name = cipher.Name;
Notes = cipher.Notes;
Fields = cipher.Fields?.Select(f => new FieldDataModel(f));
PasswordHistory = cipher.PasswordHistory?.Select(h => new PasswordHistoryDataModel(h));
}
public string Name { get; set; }
public string Notes { get; set; }
public IEnumerable<FieldDataModel> Fields { get; set; }
public IEnumerable<PasswordHistoryDataModel> PasswordHistory { get; set; }
}
}

View File

@@ -22,6 +22,7 @@ namespace Bit.App.Models.Data
Uris = response.Login.Uris?.Where(u => u != null).Select(u => new LoginUriDataModel(u));
Username = response.Login.Username;
Password = response.Login.Password;
PasswordRevisionDate = response.Login.PasswordRevisionDate;
Totp = response.Login.Totp;
}
@@ -33,6 +34,7 @@ namespace Bit.App.Models.Data
public IEnumerable<LoginUriDataModel> Uris { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public DateTime? PasswordRevisionDate { get; set; }
public string Totp { get; set; }
}
}

View File

@@ -0,0 +1,18 @@
using Bit.App.Models.Api;
namespace Bit.App.Models.Data
{
public class PasswordHistoryDataModel
{
public PasswordHistoryDataModel() { }
public PasswordHistoryDataModel(PasswordHistoryResponse h)
{
Password = h.Password;
LastUsedDate = h.LastUsedDate;
}
public string Password { get; set; }
public System.DateTime LastUsedDate { get; set; }
}
}

View File

@@ -28,6 +28,7 @@ namespace Bit.App.Models
Username = deserializedData.Username != null ? new CipherString(deserializedData.Username) : null;
Password = deserializedData.Password != null ? new CipherString(deserializedData.Password) : null;
PasswordRevisionDate = deserializedData.PasswordRevisionDate;
Totp = deserializedData.Totp != null ? new CipherString(deserializedData.Totp) : null;
Uris = deserializedData.Uris?.Select(u => new LoginUri(u));
}
@@ -35,6 +36,7 @@ namespace Bit.App.Models
public IEnumerable<LoginUri> Uris { get; set; }
public CipherString Username { get; set; }
public CipherString Password { get; set; }
public DateTime? PasswordRevisionDate { get; set; }
public CipherString Totp { get; set; }
}
}

58
src/App/Models/OtpAuth.cs Normal file
View File

@@ -0,0 +1,58 @@
using Bit.App.Utilities;
using PCLCrypto;
namespace Bit.App.Models
{
public class OtpAuth
{
public OtpAuth(string key)
{
if(key?.ToLowerInvariant().StartsWith("otpauth://") ?? false)
{
var qsParams = Helpers.GetQueryParams(key);
if(qsParams.ContainsKey("digits") && qsParams["digits"] != null &&
int.TryParse(qsParams["digits"].Trim(), out var digitParam))
{
if(digitParam > 10)
{
Digits = 10;
}
else if(digitParam > 0)
{
Digits = digitParam;
}
}
if(qsParams.ContainsKey("period") && qsParams["period"] != null &&
int.TryParse(qsParams["period"].Trim(), out var periodParam) && periodParam > 0)
{
Period = periodParam;
}
if(qsParams.ContainsKey("secret") && qsParams["secret"] != null)
{
Secret = qsParams["secret"];
}
if(qsParams.ContainsKey("algorithm") && qsParams["algorithm"] != null)
{
var algParam = qsParams["algorithm"].ToLowerInvariant();
if(algParam == "sha256")
{
Algorithm = MacAlgorithm.HmacSha256;
}
else if(algParam == "sha512")
{
Algorithm = MacAlgorithm.HmacSha512;
}
}
}
else
{
Secret = key;
}
}
public int Period { get; set; } = 30;
public int Digits { get; set; } = 6;
public MacAlgorithm Algorithm { get; set; } = MacAlgorithm.HmacSha1;
public string Secret { get; set; }
}
}

View File

@@ -79,7 +79,7 @@ namespace Bit.App.Models.Page
}
else
{
iconsUrl = "https://icons.bitwarden.com";
iconsUrl = "https://icons.bitwarden.net";
}
}
@@ -172,7 +172,11 @@ namespace Bit.App.Models.Page
{
AddRange(groupItems);
if(doUpper)
if(string.IsNullOrWhiteSpace(name))
{
Name = "-";
}
else if(doUpper)
{
Name = name.ToUpperInvariant();
}

View File

@@ -11,7 +11,7 @@ namespace Bit.App.Models.Page
{
private const string MaskedPasswordString = "••••••••";
private string _name, _notes;
private string _name, _notes, _reivisonDate, _passwordReivisonDate;
private List<Attachment> _attachments;
private List<Field> _fields;
private List<LoginUri> _loginUris;
@@ -23,6 +23,7 @@ namespace Bit.App.Models.Page
// Card
private string _cardName, _cardNumber, _cardBrand, _cardExpMonth, _cardExpYear, _cardCode;
private bool _cardRevealCardCode;
// Identity
private string _idFirstName, _idLastName, _idMiddleName, _idCompany, _idEmail, _idPhone, _idUsername,
@@ -43,6 +44,28 @@ namespace Bit.App.Models.Page
}
}
public string RevisionDate
{
get => _reivisonDate;
set
{
_reivisonDate = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(RevisionDate)));
}
}
public string PasswordRevisionDate
{
get => _passwordReivisonDate;
set
{
_passwordReivisonDate = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(PasswordRevisionDate)));
PropertyChanged(this, new PropertyChangedEventArgs(nameof(ShowPasswordRevisionDate)));
}
}
public bool ShowPasswordRevisionDate => !string.IsNullOrWhiteSpace(PasswordRevisionDate);
public string Notes
{
get => _notes;
@@ -155,8 +178,18 @@ namespace Bit.App.Models.Page
public bool LoginTotpLow => LoginTotpSecond <= 7;
public Color LoginTotpColor => !string.IsNullOrWhiteSpace(LoginTotpCode) && LoginTotpLow ?
Color.Red : Color.Black;
public string LoginTotpCodeFormatted => !string.IsNullOrWhiteSpace(LoginTotpCode) ?
string.Format("{0} {1}", LoginTotpCode.Substring(0, 3), LoginTotpCode.Substring(3)) : null;
public string LoginTotpCodeFormatted
{
get
{
if(string.IsNullOrWhiteSpace(LoginTotpCode) || LoginTotpCode.Length < 5)
{
return LoginTotpCode;
}
var half = (int)Math.Floor((double)LoginTotpCode.Length / 2);
return string.Format("{0} {1}", LoginTotpCode.Substring(0, half), LoginTotpCode.Substring(half));
}
}
// Card
public string CardName
@@ -250,6 +283,22 @@ namespace Bit.App.Models.Page
}
}
public bool ShowCardCode => !string.IsNullOrWhiteSpace(CardCode);
public bool RevealCardCode
{
get => _cardRevealCardCode;
set
{
_cardRevealCardCode = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(RevealCardCode)));
PropertyChanged(this, new PropertyChangedEventArgs(nameof(MaskedCardCode)));
PropertyChanged(this, new PropertyChangedEventArgs(nameof(CardCodeShowHideImage)));
}
}
public string MaskedCardCode => RevealCardCode ?
CardCode : CardCode == null ? null : new String('•', CardCode.Length);
public ImageSource CardCodeShowHideImage => RevealCardCode ?
ImageSource.FromFile("eye_slash.png") : ImageSource.FromFile("eye.png");
// Identity
@@ -506,6 +555,20 @@ namespace Bit.App.Models.Page
{
Name = cipher.Name?.Decrypt(cipher.OrganizationId);
Notes = cipher.Notes?.Decrypt(cipher.OrganizationId);
var revisionDate = DateTime.SpecifyKind(cipher.RevisionDate, DateTimeKind.Utc).ToLocalTime();
RevisionDate = revisionDate.ToShortDateString() + " " + revisionDate.ToShortTimeString();
if(cipher.PasswordRevisionDisplayDate.HasValue)
{
var passwordRevisionDate = DateTime.SpecifyKind(
cipher.PasswordRevisionDisplayDate.Value, DateTimeKind.Utc).ToLocalTime();
PasswordRevisionDate = passwordRevisionDate.ToShortDateString() + " " +
passwordRevisionDate.ToShortTimeString();
}
else
{
PasswordRevisionDate = null;
}
if(cipher.Attachments != null)
{
@@ -676,7 +739,7 @@ namespace Bit.App.Models.Page
}
}
public string Label => IsWebsite ? AppResources.Website : AppResources.URI;
public bool IsWebsite => Value == null ? false :
public bool IsWebsite => Value == null ? false :
Value.StartsWith("http://") || Value.StartsWith("https://");
public bool IsApp => Value == null ? false : Value.StartsWith(Constants.AndroidAppProtocol);
}

View File

@@ -0,0 +1,18 @@
using Bit.App.Models.Data;
namespace Bit.App.Models
{
public class PasswordHistory
{
public PasswordHistory() { }
public PasswordHistory(PasswordHistoryDataModel model)
{
Password = model.Password != null ? new CipherString(model.Password) : null;
LastUsedDate = model.LastUsedDate;
}
public CipherString Password { get; set; }
public System.DateTime LastUsedDate { get; set; }
}
}

View File

@@ -38,7 +38,7 @@ namespace Bit.App.Pages
PasswordCell = new FormEntryCell(AppResources.MasterPassword, isPassword: true,
useLabelAsPlaceholder: true, imageSource: "lock.png", containerPadding: padding);
PasswordCell.Entry.ReturnType = Enums.ReturnType.Go;
PasswordCell.Entry.TargetReturnType = Enums.ReturnType.Go;
var table = new ExtendedTableView
{

View File

@@ -62,7 +62,7 @@ namespace Bit.App.Pages
EmailCell.Entry.Text = lastLoginEmail;
}
PasswordCell.Entry.ReturnType = Enums.ReturnType.Go;
PasswordCell.Entry.TargetReturnType = Enums.ReturnType.Go;
var table = new ExtendedTableView
{

View File

@@ -129,7 +129,7 @@ namespace Bit.App.Pages
imageSource: "lock", containerPadding: padding);
TokenCell.Entry.Keyboard = Keyboard.Numeric;
TokenCell.Entry.ReturnType = ReturnType.Go;
TokenCell.Entry.TargetReturnType = Enums.ReturnType.Go;
var table = new TwoFactorTable(
new TableSection(Helpers.GetEmptyTableSectionTitle())
@@ -232,7 +232,8 @@ namespace Bit.App.Pages
}
else if(_providerType == TwoFactorProviderType.YubiKey)
{
instruction.Text = AppResources.YubiKeyInstruction;
instruction.Text = Device.RuntimePlatform == Device.iOS ? AppResources.YubiKeyInstructionIos :
AppResources.YubiKeyInstruction;
var image = new CachedImage
{
@@ -244,25 +245,49 @@ namespace Bit.App.Pages
Margin = new Thickness(0, 0, 0, 25)
};
TokenCell = new FormEntryCell("", isPassword: true, imageSource: "lock", useLabelAsPlaceholder: true);
TokenCell.Entry.ReturnType = ReturnType.Go;
var section = new TableSection(Helpers.GetEmptyTableSectionTitle())
{
RememberCell
};
var table = new TwoFactorTable(
new TableSection(Helpers.GetEmptyTableSectionTitle())
{
TokenCell,
RememberCell
});
if(Device.RuntimePlatform != Device.iOS)
{
TokenCell = new FormEntryCell("", isPassword: true, imageSource: "lock",
useLabelAsPlaceholder: true);
TokenCell.Entry.TargetReturnType = Enums.ReturnType.Go;
section.Insert(0, TokenCell);
}
var table = new TwoFactorTable(section);
var layout = new RedrawableStackLayout
{
Children = { instruction, image, table, anotherMethodButton },
Children = { instruction, image, table },
Spacing = 0
};
if(Device.RuntimePlatform == Device.iOS)
{
var tryAgainButton = new ExtendedButton
{
Text = AppResources.TryAgain,
Style = (Style)Application.Current.Resources["btn-primaryAccent"],
Margin = new Thickness(15, 0, 15, 0),
Command = new Command(() => ListenYubiKey(true, true)),
Uppercase = false,
BackgroundColor = Color.Transparent,
VerticalOptions = LayoutOptions.Start
};
layout.Children.Add(tryAgainButton);
}
else
{
ToolbarItems.Add(continueToolbarItem);
}
layout.Children.Add(anotherMethodButton);
table.WrappingStackLayout = () => layout;
scrollView.Content = layout;
ToolbarItems.Add(continueToolbarItem);
Title = AppResources.YubiKeyTitle;
Content = scrollView;
@@ -310,6 +335,17 @@ namespace Bit.App.Pages
MessagingCenter.Unsubscribe<Application>(Application.Current, "ResumeYubiKey");
}
protected override bool OnBackButtonPressed()
{
// ref: https://github.com/bitwarden/mobile/issues/350
if(Device.RuntimePlatform == Device.Android && _providerType.HasValue &&
_providerType.Value == TwoFactorProviderType.YubiKey)
{
return true;
}
return base.OnBackButtonPressed();
}
private async void AnotherMethodAsync()
{
var beforeProviderType = _providerType;
@@ -334,7 +370,7 @@ namespace Bit.App.Pages
{
var nfcKey = _providers[TwoFactorProviderType.YubiKey].ContainsKey("Nfc") &&
(bool)_providers[TwoFactorProviderType.YubiKey]["Nfc"];
if(_deviceInfoService.NfcEnabled && nfcKey || Device.RuntimePlatform == Device.UWP)
if((_deviceInfoService.NfcEnabled && nfcKey) || Device.RuntimePlatform != Device.iOS)
{
options.Add(AppResources.YubiKeyTitle);
}
@@ -486,7 +522,7 @@ namespace Bit.App.Pages
}
var nfcKey = p.Value.ContainsKey("Nfc") && (bool)p.Value["Nfc"];
if((!_deviceInfoService.NfcEnabled || !nfcKey) && Device.RuntimePlatform != Device.UWP)
if((!_deviceInfoService.NfcEnabled || !nfcKey) && Device.RuntimePlatform == Device.iOS)
{
continue;
}

View File

@@ -36,7 +36,7 @@ namespace Bit.App.Pages
EmailCell = new FormEntryCell(AppResources.EmailAddress, entryKeyboard: Keyboard.Email,
useLabelAsPlaceholder: true, imageSource: "envelope.png", containerPadding: padding);
EmailCell.Entry.ReturnType = Enums.ReturnType.Go;
EmailCell.Entry.TargetReturnType = Enums.ReturnType.Go;
var table = new ExtendedTableView
{

View File

@@ -60,7 +60,7 @@ namespace Bit.App.Pages
entryKeyboard: Keyboard.Email, useLabelAsPlaceholder: true, imageSource: "envelope.png",
containerPadding: padding);
PasswordHintCell.Entry.ReturnType = Enums.ReturnType.Done;
PasswordHintCell.Entry.TargetReturnType = Enums.ReturnType.Done;
var table = new FormTableView(this)
{

View File

@@ -118,10 +118,6 @@ namespace Bit.App.Pages
{
base.OnAppearing();
NameCell.InitEvents();
if(!_connectivity.IsConnected)
{
AlertNoConnection();
}
}
protected override void OnDisappearing()

View File

@@ -131,11 +131,6 @@ namespace Bit.App.Pages
base.OnAppearing();
NameCell.InitEvents();
DeleteCell.Tapped += DeleteCell_Tapped;
if(!_connectivity.IsConnected)
{
AlertNoConnection();
}
}
protected override void OnDisappearing()

View File

@@ -68,10 +68,6 @@ namespace Bit.App.Pages
protected override void OnAppearing()
{
base.OnAppearing();
if(!_connectivity.IsConnected)
{
AlertNoConnection();
}
}
private void SetLastSync()

View File

@@ -104,7 +104,7 @@ namespace Bit.App.Pages
DisabledStackLayout = new StackLayout
{
Children = { BuildServiceLabel(), statusDisabledLabel, enableImage, goButton, BuildAccessibilityButton() },
Children = { BuildServiceLabel(), statusDisabledLabel, enableImage, goButton },
Orientation = StackOrientation.Vertical,
Spacing = 20,
Padding = new Thickness(20, 30),
@@ -113,7 +113,7 @@ namespace Bit.App.Pages
EnabledStackLayout = new StackLayout
{
Children = { BuildServiceLabel(), statusEnabledLabel, useImage, BuildAccessibilityButton() },
Children = { BuildServiceLabel(), statusEnabledLabel, useImage },
Orientation = StackOrientation.Vertical,
Spacing = 20,
Padding = new Thickness(20, 30),
@@ -166,22 +166,5 @@ namespace Bit.App.Pages
FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Label))
};
}
private ExtendedButton BuildAccessibilityButton()
{
return new ExtendedButton
{
Text = AppResources.AutofillAccessibilityService,
Command = new Command(async () =>
{
await Navigation.PushAsync(new ToolsAccessibilityServicePage());
}),
VerticalOptions = LayoutOptions.End,
HorizontalOptions = LayoutOptions.Fill,
Style = (Style)Application.Current.Resources["btn-primaryAccent"],
Uppercase = false,
BackgroundColor = Color.Transparent
};
}
}
}

View File

@@ -29,6 +29,7 @@ namespace Bit.App.Pages
public ToolsViewCell ImportCell { get; set; }
public ToolsViewCell ExtensionCell { get; set; }
public ToolsViewCell AutofillCell { get; set; }
public ToolsViewCell AccessibilityCell { get; set; }
public void Init()
{
@@ -46,11 +47,17 @@ namespace Bit.App.Pages
}
if(Device.RuntimePlatform == Device.Android)
{
var desc = _deviceInfoService.AutofillServiceSupported ?
AppResources.BitwardenAutofillServiceDescription :
AppResources.BitwardenAutofillAccessibilityServiceDescription;
AutofillCell = new ToolsViewCell(AppResources.BitwardenAutofillService, desc, "upload.png");
section.Add(AutofillCell);
var accessibilityDesc = AppResources.BitwardenAutofillAccessibilityServiceDescription;
if(_deviceInfoService.AutofillServiceSupported)
{
AutofillCell = new ToolsViewCell(AppResources.AutofillService,
AppResources.BitwardenAutofillServiceDescription, "upload2.png");
section.Add(AutofillCell);
accessibilityDesc += (" " + AppResources.BitwardenAutofillAccessibilityServiceDescription2);
}
AccessibilityCell = new ToolsViewCell(AppResources.AutofillAccessibilityService,
accessibilityDesc, "upload.png");
section.Add(AccessibilityCell);
}
section.Add(WebCell);
@@ -96,6 +103,10 @@ namespace Bit.App.Pages
{
AutofillCell.Tapped += AutofillCell_Tapped;
}
if(AccessibilityCell != null)
{
AccessibilityCell.Tapped += AccessibilityCell_Tapped;
}
}
protected override void OnDisappearing()
@@ -112,7 +123,10 @@ namespace Bit.App.Pages
{
AutofillCell.Tapped -= AutofillCell_Tapped;
}
if(AccessibilityCell != null)
{
AccessibilityCell.Tapped -= AccessibilityCell_Tapped;
}
}
protected override bool OnBackButtonPressed()
@@ -128,14 +142,12 @@ namespace Bit.App.Pages
private void AutofillCell_Tapped(object sender, EventArgs e)
{
if(_deviceInfoService.AutofillServiceSupported)
{
Navigation.PushModalAsync(new ExtendedNavigationPage(new ToolsAutofillServicePage()));
}
else
{
Navigation.PushModalAsync(new ExtendedNavigationPage(new ToolsAccessibilityServicePage()));
}
Navigation.PushModalAsync(new ExtendedNavigationPage(new ToolsAutofillServicePage()));
}
private void AccessibilityCell_Tapped(object sender, EventArgs e)
{
Navigation.PushModalAsync(new ExtendedNavigationPage(new ToolsAccessibilityServicePage()));
}
private void ExtensionCell_Tapped(object sender, EventArgs e)

View File

@@ -400,7 +400,9 @@ namespace Bit.App.Pages
LengthSlider = new Slider(5, 64, _settings.GetValueOrDefault(Constants.PasswordGeneratorLength, 10))
{
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.CenterAndExpand
VerticalOptions = LayoutOptions.CenterAndExpand,
MaximumTrackColor = Color.LightGray,
MinimumTrackColor = Color.LightGray,
};
Value = new Label
@@ -408,7 +410,8 @@ namespace Bit.App.Pages
FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label)),
HorizontalOptions = LayoutOptions.End,
VerticalOptions = LayoutOptions.CenterAndExpand,
Style = (Style)Application.Current.Resources["text-muted"]
Style = (Style)Application.Current.Resources["text-muted"],
FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", Windows: "Courier"),
};
Value.SetBinding(Label.TextProperty, nameof(PasswordGeneratorPageModel.Length));

View File

@@ -177,10 +177,6 @@ namespace Bit.App.Pages
protected override void OnAppearing()
{
base.OnAppearing();
if(!_connectivity.IsConnected)
{
AlertNoConnection();
}
NameCell.InitEvents();
NotesCell.InitEvents();
@@ -215,6 +211,7 @@ namespace Bit.App.Pages
CardExpYearCell.InitEvents();
CardNameCell.InitEvents();
CardNumberCell.InitEvents();
CardCodeCell.Button1.Clicked += CardCodeButton_Clicked;
break;
case CipherType.Identity:
IdTitleCell.InitEvents();
@@ -292,7 +289,7 @@ namespace Bit.App.Pages
LoginPasswordCell.Dispose();
LoginUsernameCell.Dispose();
LoginPasswordCell.Button1.Clicked -= PasswordButton_Clicked;
LoginPasswordCell.Button2.Clicked += PasswordButton2_Clicked;
LoginPasswordCell.Button2.Clicked -= PasswordButton2_Clicked;
if(LoginTotpCell?.Button1 != null)
{
LoginTotpCell.Button1.Clicked -= TotpButton_Clicked;
@@ -305,6 +302,7 @@ namespace Bit.App.Pages
CardExpYearCell.Dispose();
CardNameCell.Dispose();
CardNumberCell.Dispose();
CardCodeCell.Button1.Clicked -= CardCodeButton_Clicked;
break;
case CipherType.Identity:
IdTitleCell.Dispose();
@@ -384,6 +382,13 @@ namespace Bit.App.Pages
await Navigation.PushModalAsync(new ExtendedNavigationPage(scanPage));
}
private void CardCodeButton_Clicked(object sender, EventArgs e)
{
CardCodeCell.Entry.InvokeToggleIsPassword();
CardCodeCell.Button1.Image =
"eye" + (!CardCodeCell.Entry.IsPasswordFromToggled ? "_slash" : string.Empty) + ".png";
}
private void AlertNoConnection()
{
DisplayAlert(AppResources.InternetConnectionRequiredTitle, AppResources.InternetConnectionRequiredMessage,
@@ -452,11 +457,14 @@ namespace Bit.App.Pages
else if(_type == CipherType.Card)
{
CardCodeCell = new FormEntryCell(AppResources.SecurityCode, Keyboard.Numeric,
nextElement: NotesCell.Editor);
isPassword: true, nextElement: NotesCell.Editor, button1: "eye.png");
if(!string.IsNullOrWhiteSpace(_defaultCardCode))
{
CardCodeCell.Entry.Text = _defaultCardCode;
}
CardCodeCell.Entry.FontFamily =
Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", Windows: "Courier");
CardExpYearCell = new FormEntryCell(AppResources.ExpirationYear, Keyboard.Numeric,
nextElement: CardCodeCell.Entry);
if(!string.IsNullOrWhiteSpace(_defaultCardExpYear))

View File

@@ -23,6 +23,8 @@ namespace Bit.App.Pages
private readonly IDeviceInfoService _deviceInfo;
private readonly IGoogleAnalyticsService _googleAnalyticsService;
private DateTime? _lastAction;
private string _originalLoginPassword = null;
private List<Tuple<string, string>> _originalHiddenFields = new List<Tuple<string, string>>();
public VaultEditCipherPage(string cipherId)
{
@@ -169,7 +171,7 @@ namespace Bit.App.Pages
// Types
if(Cipher.Type == CipherType.Login)
{
LoginTotpCell = new FormEntryCell(AppResources.AuthenticatorKey,
LoginTotpCell = new FormEntryCell(AppResources.AuthenticatorKey,
button1: _deviceInfo.HasCamera ? "camera.png" : null);
LoginTotpCell.Entry.Text = Cipher.Login?.Totp?.Decrypt(Cipher.OrganizationId);
LoginTotpCell.Entry.DisableAutocapitalize = true;
@@ -179,7 +181,8 @@ namespace Bit.App.Pages
LoginPasswordCell = new FormEntryCell(AppResources.Password, isPassword: true,
nextElement: LoginTotpCell.Entry, button1: "eye.png", button2: "refresh_alt.png");
LoginPasswordCell.Entry.Text = Cipher.Login?.Password?.Decrypt(Cipher.OrganizationId);
LoginPasswordCell.Entry.Text = _originalLoginPassword =
Cipher.Login?.Password?.Decrypt(Cipher.OrganizationId);
LoginPasswordCell.Entry.DisableAutocapitalize = true;
LoginPasswordCell.Entry.Autocorrect = false;
LoginPasswordCell.Entry.FontFamily =
@@ -211,7 +214,7 @@ namespace Bit.App.Pages
foreach(var uri in Cipher.Login.Uris)
{
var value = uri.Uri?.Decrypt(Cipher.OrganizationId);
UrisSection.Insert(UrisSection.Count - 1,
UrisSection.Insert(UrisSection.Count - 1,
Helpers.MakeUriCell(value, uri.Match, UrisSection, this));
}
}
@@ -219,8 +222,10 @@ namespace Bit.App.Pages
else if(Cipher.Type == CipherType.Card)
{
CardCodeCell = new FormEntryCell(AppResources.SecurityCode, Keyboard.Numeric,
nextElement: NotesCell.Editor);
isPassword: true, nextElement: NotesCell.Editor, button1: "eye.png");
CardCodeCell.Entry.Text = Cipher.Card.Code?.Decrypt(Cipher.OrganizationId);
CardCodeCell.Entry.FontFamily =
Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", Windows: "Courier");
CardExpYearCell = new FormEntryCell(AppResources.ExpirationYear, Keyboard.Numeric,
nextElement: CardCodeCell.Entry);
@@ -413,6 +418,11 @@ namespace Bit.App.Pages
{
FieldsSection.Add(cell);
}
if(!string.IsNullOrWhiteSpace(label) && !string.IsNullOrWhiteSpace(value) &&
field.Type == FieldType.Hidden)
{
_originalHiddenFields.Add(new Tuple<string, string>(label, value));
}
}
}
AddFieldCell = new ExtendedTextCell
@@ -490,6 +500,7 @@ namespace Bit.App.Pages
NotesCell.Editor.Text.Encrypt(Cipher.OrganizationId);
Cipher.Favorite = FavoriteCell.On;
var passwordHistory = Cipher.PasswordHistory?.ToList() ?? new List<PasswordHistory>();
switch(Cipher.Type)
{
case CipherType.Login:
@@ -501,8 +512,21 @@ namespace Bit.App.Pages
LoginPasswordCell.Entry.Text.Encrypt(Cipher.OrganizationId),
Totp = string.IsNullOrWhiteSpace(LoginTotpCell.Entry.Text) ? null :
LoginTotpCell.Entry.Text.Encrypt(Cipher.OrganizationId),
PasswordRevisionDate = Cipher.Login.PasswordRevisionDate,
};
if(!string.IsNullOrWhiteSpace(_originalLoginPassword) &&
LoginPasswordCell.Entry.Text != _originalLoginPassword)
{
var now = DateTime.UtcNow;
passwordHistory.Insert(0, new PasswordHistory
{
LastUsedDate = now,
Password = _originalLoginPassword.Encrypt(Cipher.OrganizationId),
});
Cipher.Login.PasswordRevisionDate = now;
}
Helpers.ProcessUrisSectionForSave(UrisSection, Cipher);
break;
case CipherType.SecureNote:
@@ -637,7 +661,18 @@ namespace Bit.App.Pages
Cipher.FolderId = null;
}
Helpers.ProcessFieldsSectionForSave(FieldsSection, Cipher);
var hiddenFields = Helpers.ProcessFieldsSectionForSave(FieldsSection, Cipher);
var changedFields = _originalHiddenFields.Where(of =>
hiddenFields.Any(f => f.Item1 == of.Item1 && f.Item2 != of.Item2));
foreach(var cf in changedFields)
{
passwordHistory.Insert(0, new PasswordHistory
{
LastUsedDate = DateTime.UtcNow,
Password = (cf.Item1 + ": " + cf.Item2).Encrypt(Cipher.OrganizationId),
});
}
Cipher.PasswordHistory = (passwordHistory?.Count ?? 0) > 0 ? passwordHistory.Take(5) : null;
await _deviceActionService.ShowLoadingAsync(AppResources.Saving);
var saveTask = await _cipherService.SaveAsync(Cipher);
@@ -665,11 +700,6 @@ namespace Bit.App.Pages
protected override void OnAppearing()
{
base.OnAppearing();
if(!_connectivity.IsConnected)
{
AlertNoConnection();
}
NameCell?.InitEvents();
NotesCell?.InitEvents();
FolderCell?.InitEvents();
@@ -717,6 +747,10 @@ namespace Bit.App.Pages
CardExpYearCell?.InitEvents();
CardNameCell?.InitEvents();
CardNumberCell?.InitEvents();
if(CardCodeCell?.Button1 != null)
{
CardCodeCell.Button1.Clicked += CardCodeButton_Clicked;
}
break;
case CipherType.Identity:
IdTitleCell?.InitEvents();
@@ -797,6 +831,10 @@ namespace Bit.App.Pages
CardExpYearCell?.Dispose();
CardNameCell?.Dispose();
CardNumberCell?.Dispose();
if(CardCodeCell?.Button1 != null)
{
CardCodeCell.Button1.Clicked -= CardCodeButton_Clicked;
}
break;
case CipherType.Identity:
IdTitleCell?.Dispose();
@@ -821,7 +859,7 @@ namespace Bit.App.Pages
default:
break;
}
Helpers.DisposeSectionEvents(FieldsSection);
Helpers.DisposeSectionEvents(UrisSection);
}
@@ -871,6 +909,13 @@ namespace Bit.App.Pages
await Navigation.PushModalAsync(new ExtendedNavigationPage(scanPage));
}
private void CardCodeButton_Clicked(object sender, EventArgs e)
{
CardCodeCell.Entry.InvokeToggleIsPassword();
CardCodeCell.Button1.Image =
"eye" + (!CardCodeCell.Entry.IsPasswordFromToggled ? "_slash" : string.Empty) + ".png";
}
private async void AttachmentsCell_Tapped(object sender, EventArgs e)
{
var page = new ExtendedNavigationPage(new VaultAttachmentsPage(_cipherId));

View File

@@ -257,7 +257,8 @@ namespace Bit.App.Pages
searchFilter = searchFilter.ToLower();
var filteredCiphers = Ciphers
.Where(s => s.Name.ToLower().Contains(searchFilter) ||
(s.Subtitle?.ToLower().Contains(searchFilter) ?? false))
(s.Subtitle?.ToLower().Contains(searchFilter) ?? false) ||
(s.LoginUri?.ToLower().Contains(searchFilter) ?? false))
.TakeWhile(s => !ct.IsCancellationRequested)
.ToArray();

View File

@@ -43,6 +43,7 @@ namespace Bit.App.Pages
private TableSection NotesSection { get; set; }
private TableSection AttachmentsSection { get; set; }
private TableSection FieldsSection { get; set; }
public TableSection OtherSection { get; set; }
public LabeledValueCell NotesCell { get; set; }
private EditCipherToolBarItem EditItem { get; set; }
public List<LabeledValueCell> FieldsCells { get; set; }
@@ -51,6 +52,7 @@ namespace Bit.App.Pages
// Login
public LabeledValueCell LoginUsernameCell { get; set; }
public LabeledValueCell LoginPasswordCell { get; set; }
public LabeledValueCell LoginPasswordRevisionDateCell { get; set; }
public LabeledValueCell LoginTotpCodeCell { get; set; }
// Card
@@ -111,6 +113,10 @@ namespace Bit.App.Pages
NotesCell.Value.SetBinding(Label.TextProperty, nameof(VaultViewCipherPageModel.Notes));
NotesCell.Value.LineBreakMode = LineBreakMode.WordWrap;
var revisionDateCell = new LabeledValueCell(AppResources.DateUpdated);
revisionDateCell.Value.SetBinding(Label.TextProperty, nameof(VaultViewCipherPageModel.RevisionDate));
revisionDateCell.Value.LineBreakMode = LineBreakMode.WordWrap;
switch(_type)
{
case CipherType.Login:
@@ -152,6 +158,12 @@ namespace Bit.App.Pages
nameof(VaultViewCipherPageModel.LoginTotpColor));
LoginTotpCodeCell.Value.FontFamily =
Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", Windows: "Courier");
// Password Revision Date
LoginPasswordRevisionDateCell = new LabeledValueCell(AppResources.DatePasswordUpdated);
LoginPasswordRevisionDateCell.Value.SetBinding(Label.TextProperty,
nameof(VaultViewCipherPageModel.PasswordRevisionDate));
LoginPasswordRevisionDateCell.Value.LineBreakMode = LineBreakMode.WordWrap;
break;
case CipherType.Card:
CardNameCell = new LabeledValueCell(AppResources.CardholderName);
@@ -168,9 +180,15 @@ namespace Bit.App.Pages
CardExpCell = new LabeledValueCell(AppResources.Expiration);
CardExpCell.Value.SetBinding(Label.TextProperty, nameof(VaultViewCipherPageModel.CardExp));
CardCodeCell = new LabeledValueCell(AppResources.SecurityCode, button1Image: "clipboard.png");
CardCodeCell.Button1.Command = new Command(() => Copy(Model.CardCode, AppResources.SecurityCode));
CardCodeCell.Value.SetBinding(Label.TextProperty, nameof(VaultViewCipherPageModel.CardCode));
CardCodeCell = new LabeledValueCell(AppResources.SecurityCode, button1Image: string.Empty,
button2Image: "clipboard.png");
CardCodeCell.Value.SetBinding(Label.TextProperty, nameof(VaultViewCipherPageModel.MaskedCardCode));
CardCodeCell.Button1.SetBinding(Button.ImageProperty,
nameof(VaultViewCipherPageModel.CardCodeShowHideImage));
CardCodeCell.Button1.Command = new Command(() => Model.RevealCardCode = !Model.RevealCardCode);
CardCodeCell.Button2.Command = new Command(() => Copy(Model.CardCode, AppResources.SecurityCode));
CardCodeCell.Value.FontFamily =
Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", Windows: "Courier");
break;
case CipherType.Identity:
IdNameCell = new LabeledValueCell(AppResources.Name);
@@ -229,6 +247,11 @@ namespace Bit.App.Pages
NotesCell
};
OtherSection = new TableSection(Helpers.GetEmptyTableSectionTitle())
{
revisionDateCell
};
Table = new ExtendedTableView
{
Intent = TableIntent.Settings,
@@ -357,10 +380,26 @@ namespace Bit.App.Pages
Table.Root.Add(AttachmentsSection);
}
// Other
if(Table.Root.Contains(OtherSection))
{
Table.Root.Remove(OtherSection);
}
Table.Root.Add(OtherSection);
// Various types
switch(cipher.Type)
{
case CipherType.Login:
if(OtherSection.Contains(LoginPasswordRevisionDateCell))
{
OtherSection.Remove(LoginPasswordRevisionDateCell);
}
if(Model.ShowPasswordRevisionDate)
{
OtherSection.Add(LoginPasswordRevisionDateCell);
}
AddSectionCell(LoginUsernameCell, Model.ShowLoginUsername);
AddSectionCell(LoginPasswordCell, Model.ShowLoginPassword);
@@ -373,10 +412,11 @@ namespace Bit.App.Pages
var totpKey = cipher.Login?.Totp.Decrypt(cipher.OrganizationId);
if(!string.IsNullOrWhiteSpace(totpKey))
{
var otpParams = new OtpAuth(totpKey);
Model.LoginTotpCode = Crypto.Totp(totpKey);
if(!string.IsNullOrWhiteSpace(Model.LoginTotpCode))
{
TotpTick(totpKey);
TotpTick(totpKey, otpParams.Period);
_timerStarted = DateTime.Now;
Device.StartTimer(new TimeSpan(0, 0, 1), () =>
{
@@ -385,7 +425,7 @@ namespace Bit.App.Pages
return false;
}
TotpTick(totpKey);
TotpTick(totpKey, otpParams.Period);
return true;
});
@@ -490,11 +530,11 @@ namespace Bit.App.Pages
_deviceActionService.Toast(string.Format(AppResources.ValueHasBeenCopied, alertLabel));
}
private void TotpTick(string totpKey)
private void TotpTick(string totpKey, int interval)
{
var now = Helpers.EpocUtcNow() / 1000;
var mod = now % 30;
Model.LoginTotpSecond = (int)(30 - mod);
var mod = now % interval;
Model.LoginTotpSecond = (int)(interval - mod);
if(mod == 0)
{

View File

@@ -492,6 +492,15 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to The accessibility service may be helpful to use when apps do not support the standard auto-fill service..
/// </summary>
public static string BitwardenAutofillAccessibilityServiceDescription2 {
get {
return ResourceManager.GetString("BitwardenAutofillAccessibilityServiceDescription2", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to We were unable to automatically open the Android autofill settings menu for you. You can navigate to the autofill settings menu manually from Android Settings &gt; System &gt; Languages and input &gt; Advanced &gt; Autofill service..
/// </summary>
@@ -933,6 +942,24 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Password Updated.
/// </summary>
public static string DatePasswordUpdated {
get {
return ResourceManager.GetString("DatePasswordUpdated", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Updated.
/// </summary>
public static string DateUpdated {
get {
return ResourceManager.GetString("DateUpdated", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to December.
/// </summary>
@@ -1590,6 +1617,15 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Hold your Yubikey near the top of the device..
/// </summary>
public static string HoldYubikeyNearTop {
get {
return ResourceManager.GetString("HoldYubikeyNearTop", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Host.
/// </summary>
@@ -2913,6 +2949,15 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Try Again.
/// </summary>
public static string TryAgain {
get {
return ResourceManager.GetString("TryAgain", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Two-step Login.
/// </summary>
@@ -3327,6 +3372,15 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to To continue, hold your YubiKey NEO against the back of the device..
/// </summary>
public static string YubiKeyInstructionIos {
get {
return ResourceManager.GetString("YubiKeyInstructionIos", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to YubiKey Security Key.
/// </summary>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey Security Key</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Прикачване на файл</value>
@@ -1283,4 +1283,34 @@
<value>Откриване на съвпадения</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Hold your Yubikey near the top of the device.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>The accessibility service may be helpful to use when apps do not support the standard auto-fill service.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Password Updated</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Updated</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -140,7 +140,7 @@
<comment>Navigate back to the previous screen.</comment>
</data>
<data name="Bitwarden" xml:space="preserve">
<value>bitwarden</value>
<value>Bitwarden</value>
<comment>App name. Shouldn't ever change.</comment>
</data>
<data name="Cancel" xml:space="preserve">
@@ -182,18 +182,18 @@
<value>Upravit složku</value>
</data>
<data name="Email" xml:space="preserve">
<value>Email</value>
<value>E-mail</value>
<comment>Short label for an email address.</comment>
</data>
<data name="EmailAddress" xml:space="preserve">
<value>Emailová adresa</value>
<value>E-mailová adresa</value>
<comment>Full label for a email address.</comment>
</data>
<data name="EmailUs" xml:space="preserve">
<value>Napište nám</value>
</data>
<data name="EmailUsDescription" xml:space="preserve">
<value>Napište nám email pro získání pomoci nebo zanechání zpětné vazby.</value>
<value>Napište nám e-mail pro získání pomoci nebo zanechání zpětné vazby.</value>
</data>
<data name="EnterPIN" xml:space="preserve">
<value>Zadejte PIN kód.</value>
@@ -344,7 +344,7 @@
<comment>The title for the tools page.</comment>
</data>
<data name="URI" xml:space="preserve">
<value>URL</value>
<value>URI</value>
<comment>Label for a uri/url.</comment>
</data>
<data name="UseFingerprintToUnlock" xml:space="preserve">
@@ -381,7 +381,7 @@
<value>Navštivit naší webovou stránku</value>
</data>
<data name="VisitOurWebsiteDescription" xml:space="preserve">
<value>Navštivte webovou stránku aplikace pro zobrazení nejnovějších zpráv, nápovědy nebo návodu jak používat bitwarden.</value>
<value>Navštivte náš web pro získání nápovědy, novinek, kontaktu, nebo návodů, jak používat Bitwarden.</value>
</data>
<data name="Website" xml:space="preserve">
<value>Webová stránka</value>
@@ -412,13 +412,13 @@
<value>Nepoužít zaměnitelné znaky</value>
</data>
<data name="BitwardenAppExtension" xml:space="preserve">
<value>Rozšíření aplikace bitwarden</value>
<value>Rozšíření aplikace Bitwarden</value>
</data>
<data name="BitwardenAppExtensionAlert" xml:space="preserve">
<value>Nejjednodušší způsob, jak přidat nové přihlašovací údaje do vašeho trezoru, je použití rozšíření bitwarden. Přečtěte si další informace o použití rozšíření na obrazovce "Nástroje".</value>
<value>Nejjednodušší způsob, jak přidat nové přihlašovací údaje do vašeho trezoru, je použití rozšíření aplikace Bitwarden. Přečtěte si další informace o použití rozšíření na obrazovce "Nástroje".</value>
</data>
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
<value>Použijte bitwarden v Safari a ostatních prohlížečích pro automatické vyplnění přihlašovacích údajů.</value>
<value>Použijte Bitwarden v Safari a ostatních prohlížečích pro automatické vyplnění přihlašovacích údajů.</value>
</data>
<data name="BitwardenAutofillService" xml:space="preserve">
<value>Služba automatického vyplňování</value>
@@ -427,10 +427,10 @@
<value>Použijte službu usnadnění pro automatické vyplnění přihlašovacích údajů.</value>
</data>
<data name="ChangeEmail" xml:space="preserve">
<value>Změnit email</value>
<value>Změnit e-mail</value>
</data>
<data name="ChangeEmailConfirmation" xml:space="preserve">
<value>Emailovou adresu si můžete změnit na webové stránce bitwarden.com. Chcete tuto stránku nyní otevřít?</value>
<value>E-mailovou adresu si můžete změnit na webové stránce bitwarden.com. Chcete tuto stránku nyní otevřít?</value>
</data>
<data name="ChangeMasterPassword" xml:space="preserve">
<value>Změnit hlavní heslo</value>
@@ -470,7 +470,7 @@
<value>Povolit automatickou synchronizaci</value>
</data>
<data name="EnterEmailForHint" xml:space="preserve">
<value>Zadejte emailovou adresu pro zaslání nápovědy k hlavnímu heslu.</value>
<value>Zadejte e-mailovou adresu pro zaslání nápovědy k hlavnímu heslu.</value>
</data>
<data name="ExntesionReenable" xml:space="preserve">
<value>Znovu zapnout rozšíření aplikace</value>
@@ -482,7 +482,7 @@
<value>Zapnout rozšíření aplikace</value>
</data>
<data name="ExtensionInSafari" xml:space="preserve">
<value>V Safari bitwarden používá ikonku pro sdílení (nápověda: nachází se vpravo dole v menu).</value>
<value>V Safari používá Bitwarden ikonku pro sdílení (nápověda: nachází se vpravo dole v menu).</value>
<comment>Safari is the name of apple's web browser</comment>
</data>
<data name="ExtensionInstantAccess" xml:space="preserve">
@@ -498,13 +498,13 @@
<value>Vaše přihlašovací údaje jsou nyní snadno přístupné ze Safari, Chromu a dalších podporovaných aplikací.</value>
</data>
<data name="ExtensionSetup2" xml:space="preserve">
<value>V Safari a Chromu najděte bitwarden pomocí ikony sdílení (nápověda: nachází se vpravo dole v menu).</value>
<value>V Safari a Chromu najdete Bitwarden pomocí ikony sdílení (nápověda: nachází se vpravo dole v menu).</value>
</data>
<data name="ExtensionTapIcon" xml:space="preserve">
<value>Pro spuštění rozšíření klikněte na ikonku bitwarden v menu.</value>
<value>Pro spuštění rozšíření klikněte na ikonku Bitwarden v menu.</value>
</data>
<data name="ExtensionTurnOn" xml:space="preserve">
<value>Pro zapnutí bitwarden v Safari a ostatních prohlížečích, klikněte na ikonku "více" v dolní části menu.</value>
<value>Pro zapnutí Bitwarden v prohlížeči Safari a dalších aplikacích klepněte na ikonku více v dolní části menu.</value>
</data>
<data name="Favorite" xml:space="preserve">
<value>Oblíbené</value>
@@ -591,7 +591,7 @@
<value>Další nastavení</value>
</data>
<data name="MustLogInMainApp" xml:space="preserve">
<value>Před použitím rozšíření se musíte nejdříve přihlásit v hlavní aplikaci bitwarden.</value>
<value>Před použitím rozšíření se musíte nejdříve přihlásit v hlavní aplikaci Bitwarden.</value>
</data>
<data name="Never" xml:space="preserve">
<value>Nikdy</value>
@@ -616,7 +616,7 @@
<comment>Confirmation, like "Ok, I understand it"</comment>
</data>
<data name="OptionDefaults" xml:space="preserve">
<value>Výchozí nastavení je převzato z nastavení generování hesel v aplikaci bitwarden.</value>
<value>Výchozí nastavení je převzato z nastavení generování hesel v aplikaci Bitwarden.</value>
</data>
<data name="Options" xml:space="preserve">
<value>Možnosti</value>
@@ -634,13 +634,13 @@
<value>Nápověda k heslu</value>
</data>
<data name="PasswordHintAlert" xml:space="preserve">
<value>Odeslali jsme vám email s nápovědou k hlavnímu heslu.</value>
<value>Odeslali jsme vám e-mail s nápovědou k hlavnímu heslu.</value>
</data>
<data name="PasswordOverrideAlert" xml:space="preserve">
<value>Opravdu chcete přepsat aktuální heslo?</value>
</data>
<data name="PushNotificationAlert" xml:space="preserve">
<value>bitwarden udržuje váš trezor automaticky synchronizovaný pomocí nabízených oznámení. Pro nejlepší možný zážitek klikněte prosím na následující výzvě na "Ok", pokud budete požádáni o jejich povolení.</value>
<value>Bitwarden udržuje váš trezor automaticky synchronizovaný pomocí nabízených oznámení. Pro nejlepší možný zážitek klikněte prosím na následující výzvě na "Ok", pokud budete požádáni o jejich povolení.</value>
<comment>Push notifications for apple products</comment>
</data>
<data name="RateTheApp" xml:space="preserve">
@@ -650,7 +650,7 @@
<value>Pomozte nám napsáním dobré recenze!</value>
</data>
<data name="RateTheAppDescriptionAppStore" xml:space="preserve">
<value>S každou novou verzí aplikace bitwarden se v App Store obnovuje hodnocení. Pomozte nám prosím dobrou recenzí!</value>
<value>S každou novou verzí aplikace Bitwarden se v App Store obnovuje hodnocení. Pomozte nám prosím dobrou recenzí!</value>
</data>
<data name="RegeneratePassword" xml:space="preserve">
<value>Vygenerovat další heslo</value>
@@ -707,7 +707,7 @@
<value>Dvoufázové přihlášení</value>
</data>
<data name="TwoStepLoginConfirmation" xml:space="preserve">
<value>Dvoufázové přihlášení činí váš účet mnohem bezpečnější díky nutnosti po každém úspěšném přihlášení zadat ověřovací kód získaný z aplikace, SMS, emailu nebo telefonního hovoru. Dvoufázové přihlášení lze aktivovat na webové stránce bitwarden.com. Chcete tuto stránku nyní otevřít?</value>
<value>Dvoufázové přihlášení činí váš účet mnohem bezpečnějším díky nutnosti po každém úspěšném přihlášení zadat ověřovací kód získaný z aplikace, SMS, e-mailu nebo telefonního hovoru. Dvoufázové přihlášení lze aktivovat na webové stránce bitwarden.com. Chcete tuto stránku nyní otevřít?</value>
</data>
<data name="UnlockWith" xml:space="preserve">
<value>Odemknout pomocí {0}</value>
@@ -729,7 +729,7 @@
<value>Webová aplikace</value>
</data>
<data name="WebVaultDescription" xml:space="preserve">
<value>Spravujte přihlašovací údaje z jakéhokoliv prohlížeče pomocí webové aplikace bitwarden.</value>
<value>Spravujte přihlašovací údaje z jakéhokoliv prohlížeče pomocí webové aplikace Bitwarden.</value>
</data>
<data name="Lost2FAApp" xml:space="preserve">
<value>Ztratili jste ověřovací aplikaci?</value>
@@ -756,7 +756,7 @@
<comment>This is used for the autofill service. ex. "There are no items in your vault for twitter.com".</comment>
</data>
<data name="BitwardenAutofillServiceNotification" xml:space="preserve">
<value>Pokud uvidíte v liště oznámení bitwarden, můžete klepnutím na něj spustit automatické vyplnění přihlašovacích údajů.</value>
<value>Pokud uvidíte v liště oznámení z aplikace Bitwarden, můžete klepnutím na něj spustit automatické vyplnění přihlašovacích údajů.</value>
</data>
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
<value>Klikněte pro automatické vyplnění přihlašovacích údajů.</value>
@@ -765,7 +765,7 @@
<value>Otevřít nastavení usnadnění</value>
</data>
<data name="BitwardenAutofillServiceStep1" xml:space="preserve">
<value>1. V menu v nastavení Usnadnění klikněte na "bitwarden" pod nadpisem Služby.</value>
<value>1. V menu v nastavení Usnadnění klikněte na "Bitwarden" pod nadpisem Služby.</value>
</data>
<data name="BitwardenAutofillServiceStep2" xml:space="preserve">
<value>2. Zapněte přepínač a potvrďte stisknutím tlačítka OK.</value>
@@ -783,7 +783,7 @@
<value>Beta</value>
</data>
<data name="BitwardenAutofillServiceAlert" xml:space="preserve">
<value>Nejjednodušší způsob, jak přidat nové přihlašovací údaje do vašeho trezoru, je služba automatického vyplňování bitwarden. Přečtěte si další informace o použití této služby na obrazovce "Nástroje".</value>
<value>Nejjednodušší způsob, jak přidat nové přihlašovací údaje do vašeho trezoru, je služba automatického vyplňování Bitwarden. Přečtěte si další informace o použití této služby na obrazovce "Nástroje".</value>
</data>
<data name="Autofill" xml:space="preserve">
<value>Automatické vyplnění</value>
@@ -846,7 +846,7 @@
<comment>For 2FA</comment>
</data>
<data name="EnterVerificationCodeEmail" xml:space="preserve">
<value>Zadejte 6-místný kód, který byl odeslán na email {0}.</value>
<value>Zadejte 6místný kód z e-mailu, který byl zaslán na {0}.</value>
<comment>For 2FA</comment>
</data>
<data name="LoginUnavailable" xml:space="preserve">
@@ -865,7 +865,7 @@
<comment>Remember my two-step login</comment>
</data>
<data name="SendVerificationCodeAgain" xml:space="preserve">
<value>Zaslat znovu ověřovací kód na email</value>
<value>Zaslat znovu ověřovací kód na e-mail</value>
<comment>For 2FA</comment>
</data>
<data name="TwoStepLoginOptions" xml:space="preserve">
@@ -875,19 +875,19 @@
<value>Použít jinou metodu dvoufázového přihlášení</value>
</data>
<data name="VerificationEmailNotSent" xml:space="preserve">
<value>Nepodařilo se odeslat ověřovací email. Zkuste to znovu.</value>
<value>Ověřovací e-mail se nepodařilo odeslat. Zkuste to znovu.</value>
<comment>For 2FA</comment>
</data>
<data name="VerificationEmailSent" xml:space="preserve">
<value>Ověřovací email byl odeslán.</value>
<value>Ověřovací e-mail byl odeslán.</value>
<comment>For 2FA</comment>
</data>
<data name="YubiKeyInstruction" xml:space="preserve">
<value>Pro pokračování podržte YubiKey NEO blízko zadní strany vašeho zařízení.</value>
<value>Pro pokračování podržte YubiKey NEO blízko zadní strany vašeho zařízení nebo vložte YubiKey do USB portu a stiskněte tlačítko na klíči.</value>
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey NEO bezpečnostní klíč</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Přidat přílohu</value>
@@ -995,10 +995,10 @@
<value>Pro pokročilé uživatele. Můžete zadat základní URL adresu každé služby zvlášť.</value>
</data>
<data name="EnvironmentSaved" xml:space="preserve">
<value>URL adresy vlastního prostředí byly uloženy.</value>
<value>URL adresy vlastního prostředí byly uloženy</value>
</data>
<data name="FormattedIncorrectly" xml:space="preserve">
<value>{0} nemá správný formát.</value>
<value>{0} má nesprávný formát.</value>
<comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment>
</data>
<data name="IdentityUrl" xml:space="preserve">
@@ -1009,7 +1009,7 @@
<value>Vlastnoručně hostované prostředí</value>
</data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Zadejte základní URL adresu vlastnoručně hostované aplikace bitwarden.</value>
<value>Zadejte základní URL adresu vlastnoručně hostované aplikace Bitwarden.</value>
</data>
<data name="ServerUrl" xml:space="preserve">
<value>URL serveru</value>
@@ -1144,7 +1144,7 @@
<value>Telefon</value>
</data>
<data name="September" xml:space="preserve">
<value>Záři</value>
<value>Září</value>
</data>
<data name="SSN" xml:space="preserve">
<value>Číslo sociálního pojištění</value>
@@ -1174,7 +1174,7 @@
<value>URL serveru ikonek</value>
</data>
<data name="AutofillWithBitwarden" xml:space="preserve">
<value>Automatické vyplnění s aplikací bitwarden</value>
<value>Automatické vyplnění s aplikací Bitwarden</value>
</data>
<data name="VaultIsLocked" xml:space="preserve">
<value>Trezor je zamknutý</value>
@@ -1195,7 +1195,7 @@
<value>Služba automatického vyplňování</value>
</data>
<data name="AutofillServiceDescription" xml:space="preserve">
<value>The bitwarden auto-fill service uses the Android Autofill Framework to assist in filling logins, credit cards, and identity information into other apps on your device.</value>
<value>Služba Bitwarden automatického vyplnění používá Android Autofill framework pro vyplnění přihlašovacích údajů, čísel platebních karet a dalších osobních informací do dalších aplikací ve vašem zařízení.</value>
</data>
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
<value>Použijte službu usnadnění pro automatické vyplnění přihlašovacích údajům, karet nebo identit v ostatních aplikacích.</value>
@@ -1226,61 +1226,91 @@
<value>Windows Hello</value>
</data>
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
<value>We were unable to automatically open the Android autofill settings menu for you. You can navigate to the autofill settings menu manually from Android Settings &gt; System &gt; Languages and input &gt; Advanced &gt; Autofill service.</value>
<value>Nepodařilo se nám automaticky otevřít nastavení automatického vyplňování Android. Nastavení můžete otevřít ručně z Nastavení systému Android &gt; Systém &gt; Jazyky a vstup &gt; Rozšířené &gt; Služba automatického vyplňování.</value>
</data>
<data name="CustomFieldName" xml:space="preserve">
<value>Custom Field Name</value>
<value>Název vlastního pole</value>
</data>
<data name="FieldTypeBoolean" xml:space="preserve">
<value>Boolean</value>
<value>Ano/Ne</value>
</data>
<data name="FieldTypeHidden" xml:space="preserve">
<value>Hidden</value>
<value>Skryté</value>
</data>
<data name="FieldTypeText" xml:space="preserve">
<value>Text</value>
</data>
<data name="NewCustomField" xml:space="preserve">
<value>New Custom Field</value>
<value>Nové vlastní pole</value>
</data>
<data name="SelectTypeField" xml:space="preserve">
<value>What type of custom field do you want to add?</value>
<value>Jaký typ vlastního pole chcete přidat?</value>
</data>
<data name="Remove" xml:space="preserve">
<value>Remove</value>
<value>Smazat</value>
</data>
<data name="NewUri" xml:space="preserve">
<value>New URI</value>
<value>Nová URI</value>
</data>
<data name="URIPosition" xml:space="preserve">
<value>URI {0}</value>
<comment>Label for a uri/url with position. i.e. URI 1, URI 2, etc</comment>
</data>
<data name="BaseDomain" xml:space="preserve">
<value>Base domain</value>
<value>Základní doména</value>
</data>
<data name="Default" xml:space="preserve">
<value>Default</value>
<value>Výchozí</value>
</data>
<data name="Exact" xml:space="preserve">
<value>Exact</value>
<value>Přesně</value>
</data>
<data name="Host" xml:space="preserve">
<value>Host</value>
<comment>A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'.</comment>
</data>
<data name="RegEx" xml:space="preserve">
<value>Regular expression</value>
<value>Regulární výraz</value>
<comment>A programming term, also known as 'RegEx'.</comment>
</data>
<data name="StartsWith" xml:space="preserve">
<value>Starts with</value>
<value>Začíná na</value>
</data>
<data name="URIMatchDetection" xml:space="preserve">
<value>URI Match Detection</value>
<value>Zjišťování shody URI</value>
</data>
<data name="MatchDetection" xml:space="preserve">
<value>Match Detection</value>
<value>Zjišťování shody</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Ano a uložit</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Automaticky vyplněno a uloženo.</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organizace</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Držte Yubikey v horní části zařízení.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Zkusit znovu</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Pro pokračování přidržte YubiKey NEO u zadní části zařízení.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Služba usnadnění může být užitečná, pokud aplikace nepodporují standardní službu automatického vyplňování.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Heslo bylo změněno</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Změněno</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -182,11 +182,11 @@
<value>Rediger mappe</value>
</data>
<data name="Email" xml:space="preserve">
<value>E-mail</value>
<value>Email</value>
<comment>Short label for an email address.</comment>
</data>
<data name="EmailAddress" xml:space="preserve">
<value>E-mail adresse</value>
<value>Emailadresse</value>
<comment>Full label for a email address.</comment>
</data>
<data name="EmailUs" xml:space="preserve">
@@ -209,7 +209,7 @@
<value>Åbn et problem på vores GitHub depot.</value>
</data>
<data name="FingerprintDirection" xml:space="preserve">
<value>Brug dit fingeraftryk til at bekræfte.</value>
<value>Bekræft med dit fingeraftryk.</value>
</data>
<data name="Folder" xml:space="preserve">
<value>Mappe</value>
@@ -363,7 +363,7 @@
<comment>Confirmation message after suceessfully copying a value to the clipboard.</comment>
</data>
<data name="VerifyFingerprint" xml:space="preserve">
<value>Bekræft fingeraftryk</value>
<value>Verificer fingeraftryk</value>
</data>
<data name="VerifyMasterPassword" xml:space="preserve">
<value>Bekræft hovedadgangskode</value>
@@ -381,7 +381,7 @@
<value>Besøg vores hjemmeside</value>
</data>
<data name="VisitOurWebsiteDescription" xml:space="preserve">
<value>Besøg vores hjemmeside for at få hjælp, nyheder, sende os en e-mail og/eller lære mere om hvordan du bruger Bitwarden.</value>
<value>Besøg vores hjemmeside for at få hjælp, nyheder, sende os en email og/eller lære mere om hvordan du bruger Bitwarden.</value>
</data>
<data name="Website" xml:space="preserve">
<value>Hjemmeside</value>
@@ -427,10 +427,10 @@
<value>Brug Bitwardens hjælpefunktion til at auto-udfylde dine logins.</value>
</data>
<data name="ChangeEmail" xml:space="preserve">
<value>Skift E-mailadresse</value>
<value>Skift email</value>
</data>
<data name="ChangeEmailConfirmation" xml:space="preserve">
<value>Du kan ændre din e-mail adresse i bitwarden.com web-boksen. Vil du besøge hjemmesiden nu?</value>
<value>Du kan ændre din emailadresse i bitwarden.com web-boksen. Vil du besøge hjemmesiden nu?</value>
</data>
<data name="ChangeMasterPassword" xml:space="preserve">
<value>Skift hovedadgangskode</value>
@@ -470,7 +470,7 @@
<value>Aktiver automatisk synkronisering</value>
</data>
<data name="EnterEmailForHint" xml:space="preserve">
<value>Indtast din kontos e-mailadresse for at modtage dit hovedadgangskodetip.</value>
<value>Indtast din kontos emailadresse for at modtage dit hovedadgangskodetip.</value>
</data>
<data name="ExntesionReenable" xml:space="preserve">
<value>Genaktiver app udvidelse</value>
@@ -510,7 +510,7 @@
<value>Favorit</value>
</data>
<data name="Fingerprint" xml:space="preserve">
<value>Fingeraftryk</value>
<value>fingeraftryk</value>
</data>
<data name="GeneratePassword" xml:space="preserve">
<value>Generer adgangskode</value>
@@ -522,7 +522,7 @@
<value>Importer elementer</value>
</data>
<data name="ImportItemsConfirmation" xml:space="preserve">
<value>Du kan importere emner i din web-boks på bitwarden.com. Vil du besøge hjemmesiden nu?</value>
<value>Du kan importere elementer i din web-boks på bitwarden.com. Vil du besøge hjemmesiden nu?</value>
</data>
<data name="ImportItemsDescription" xml:space="preserve">
<value>Importer hurtigt dine elementer fra andre adgangskode manager-programmer.</value>
@@ -580,11 +580,11 @@
<value>Hovedadgangskode skal være mindst 8 tegn.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Mindste antal cifre</value>
<value>Minimum cifre</value>
<comment>Minimum numeric characters for password generator settings</comment>
</data>
<data name="MinSpecial" xml:space="preserve">
<value>Mindste antal specialtegn</value>
<value>Minimum specialtegn</value>
<comment>Minimum special characters for password generator settings</comment>
</data>
<data name="MoreSettings" xml:space="preserve">
@@ -634,7 +634,7 @@
<value>Adgangskodetip</value>
</data>
<data name="PasswordHintAlert" xml:space="preserve">
<value>Vi har sendt dig en e-mail med dit hovedadgangskodetip.</value>
<value>Vi har sendt dig en email med dit hovedadgangskodetip.</value>
</data>
<data name="PasswordOverrideAlert" xml:space="preserve">
<value>Er du sikker du vil overskrive den aktuelle adgangskode?</value>
@@ -707,7 +707,7 @@
<value>To-trins login</value>
</data>
<data name="TwoStepLoginConfirmation" xml:space="preserve">
<value>To-trins login gør din konto mere sikker ved at kræve du verificere dit login med en anden enhed såsom en sikkerhedsnøgle, autentificering app, SMS, telefonopkald eller e-mail. To-trins login kan aktiveres på bitwarden.com web-boksen. Vil du besøge hjemmesiden nu?</value>
<value>To-trins login gør din konto mere sikker, ved at kræve at du verificerer dit login med en anden enhed, såsom en sikkerhedsnøgle, autentificerings app, SMS, telefonopkald eller email. To-trins login kan aktiveres på bitwarden.com web-boksen. Vil du besøge hjemmesiden nu?</value>
</data>
<data name="UnlockWith" xml:space="preserve">
<value>Lås op med {0}</value>
@@ -813,7 +813,7 @@
<value>Opret en organisation for at dele dine elementer med andre brugere på en sikker måde.</value>
</data>
<data name="DisableGADescription" xml:space="preserve">
<value>Vi bruger Analytics til at bedre lære hvordan appen bruges, således at vi kan gøre den bedre. Al dataindsamling er fuldstændig anonym.</value>
<value>Vi bruger Analytics for bedre at lære hvordan appen bruges, således at vi kan gøre den bedre. Al dataindsamling er fuldstændig anonym.</value>
</data>
<data name="AutofillPasswordField" xml:space="preserve">
<value>Skan når adgangskodefeltet fokuseres</value>
@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey sikkerhedsnøgle</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Tilføj ny vedhæftning</value>
@@ -1192,7 +1192,7 @@
<value>Der er ingen elementer i denne mappe.</value>
</data>
<data name="AutofillAccessibilityService" xml:space="preserve">
<value>Auto-udfyld hjæpefunktion</value>
<value>Auto-udfyld hjælpefunktion</value>
</data>
<data name="AutofillServiceDescription" xml:space="preserve">
<value>Bitwarden auto-udfyld tjenesten bruger Androids Auto-udfyld framework til at hjælpe med at udfylde logins, kreditkort og identitetsoplysninger i andre apps på din enhed.</value>
@@ -1277,10 +1277,40 @@
<value>Begynder med</value>
</data>
<data name="URIMatchDetection" xml:space="preserve">
<value>URI matchgenkendelse</value>
<value>URI matchmetode</value>
</data>
<data name="MatchDetection" xml:space="preserve">
<value>Matchgenkendelse</value>
<value>Matchmetode</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Ja, og gem</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-udfyld og gem</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organisation</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Hold din Yubikey nær toppen af enheden.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Prøv igen</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>For at fortsætte skal du holde din YubiKey NEO mod bagsiden af enheden.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Hjælpefunktionen kan være nyttigt at bruge, når apps ikke understøtter den almindelige auto-udfyldningstjeneste.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Adgangskode opdateret</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Opdateret</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey NEO Sicherheitsschlüssel</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Anhang hinzufügen</value>
@@ -1283,4 +1283,34 @@
<value>Match-Erkennung</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Ja, und speichern</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Automatisch ausfüllen und speichern</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organisation</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Halte deinen Yubikey an den oberen Bereich deines Geräts.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Erneut versuchen</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Um fortzufahren, halte deinen YubiKey NEO gegen die Rückseite des Gerätes.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Der Barrierefreiheits-Dienst kann möglicherweise hilfreich sein, wenn apps nicht den standard AutoFill-Dienst unterstützen.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Passwort aktualisiert</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Aktualisiert</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>Llave de Seguridad YubiKey</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Añadir nuevo adjunto</value>
@@ -1283,4 +1283,34 @@
<value>Tipo de detección</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Sí y guardar</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Autorellenar y guardar</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organización</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Mantén tu Yubikey cerca de la parte superior del dispositivo.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Vuelve a intentarlo</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Para continuar, mantén tu YubiKey NEO contra la parte trasera de tu dispositivo.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>El servicio de accesibilidad puede ser útil para utilizarlo con aplicaciones que no soportan el sistema de autorellenado estándar.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Contraseña actualizada</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Actualizada</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey Security Key</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Lisa uus manus</value>
@@ -1066,7 +1066,7 @@
<value>August</value>
</data>
<data name="Brand" xml:space="preserve">
<value>Bränd</value>
<value>Väljastaja</value>
</data>
<data name="CardholderName" xml:space="preserve">
<value>Kaardiomaniku nimi</value>
@@ -1283,4 +1283,34 @@
<value>Sobivuse tuvastamine</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Jah, ja salvesta</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Täida ja salvesta</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organisatsioon</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Hoia oma Yubikey seadme ülaosa ligidal.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Proovi uuesti</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Jätkamiseks hoia YubiKey NEO-d oma seadme tagumise poole vastu.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Juurdepääsetavuse teenus võib abiks olla olukordades, kus rakendused ei toeta standardset automaattäite teenust.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Parool on uuendatud</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Uuendatud</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -140,7 +140,7 @@
<comment>Navigate back to the previous screen.</comment>
</data>
<data name="Bitwarden" xml:space="preserve">
<value>بیت واردن</value>
<value>Bitwarden</value>
<comment>App name. Shouldn't ever change.</comment>
</data>
<data name="Cancel" xml:space="preserve">
@@ -172,7 +172,7 @@
<comment>Message shown when interacting with the server</comment>
</data>
<data name="DoYouReallyWantToDelete" xml:space="preserve">
<value>مطمئنید میخواهید حذف کنید؟ این عمل قابل بازگشت نیست.</value>
<value>مطمئنید میخواهید حذف کنید؟ این عمل قابل بازگشت نیست.</value>
<comment>Confirmation alert message when deleteing something.</comment>
</data>
<data name="Edit" xml:space="preserve">
@@ -196,7 +196,7 @@
<value>برای کمک گرفتن و گذاشتن بازخورد بصورت مستقیم به ما ایمیل ارسال کنید.</value>
</data>
<data name="EnterPIN" xml:space="preserve">
<value>کد پین را وارد کنید.</value>
<value>پین کد را وارد کنید.</value>
</data>
<data name="Favorites" xml:space="preserve">
<value>علاقه مندی ها</value>
@@ -236,7 +236,7 @@
<comment>The button text that allows user to launch the website to their web browser.</comment>
</data>
<data name="HelpAndFeedback" xml:space="preserve">
<value>کمک و بازخورد</value>
<value>کمک و باز خورد</value>
</data>
<data name="Hide" xml:space="preserve">
<value>پنهان کردن</value>
@@ -273,7 +273,7 @@
<comment>The log out button text (verb).</comment>
</data>
<data name="LogoutConfirmation" xml:space="preserve">
<value>آیا مطمئنید که میخواهید خارج شوید؟</value>
<value>آیا مطمئنید که میخواهید خارج شوید؟</value>
</data>
<data name="MasterPassword" xml:space="preserve">
<value>گذرواژه‌ ی اصلی</value>
@@ -381,7 +381,7 @@
<value>از وب‌ سایت ما دیدن کنید</value>
</data>
<data name="VisitOurWebsiteDescription" xml:space="preserve">
<value>برای کمک گرفتن، اخبار، ایمیل ما، و یا آموزش بیشتر برای استفاده از بیت واردن از وب سایت ما دیدن کنید.</value>
<value>برای کمک گرفتن، اخبار، ایمیل ما، و یا آموزش بیشتر برای استفاده از Bitwarden از وب سایت ما دیدن کنید.</value>
</data>
<data name="Website" xml:space="preserve">
<value>وب سایت</value>
@@ -403,28 +403,28 @@
<value>افزونه اپلیکیشن</value>
</data>
<data name="AutofillAccessibilityDescription" xml:space="preserve">
<value>از قابلیت دسترسی بیت واردن برای پر کردن خودکار ورود به سیستم خود در سراسر برنامه ها و وب استفاده کنید.</value>
<value>از قابلیت دسترسی Bitwarden برای پر کردن خودکار ورود به سیستم خود در سراسر برنامه ها و وب استفاده کنید.</value>
</data>
<data name="AutofillService" xml:space="preserve">
<value>سرویس پر کردن خودکار</value>
</data>
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
<value>از کاراکترهای متقارن استفاده نکن</value>
<value>از تکرار کاراکترهای یک شکل اجتناب کن</value>
</data>
<data name="BitwardenAppExtension" xml:space="preserve">
<value>افزونه اپلیکیشن بیت واردن</value>
<value>افزونه اپلیکیشن Bitwarden</value>
</data>
<data name="BitwardenAppExtensionAlert" xml:space="preserve">
<value>ساده ترین روش برای افزودن اطلاعات ورود به گاوصندوق از طریق افزونه اپلیکیشن بیت واردن است. برای اطلاع بیشتر از چگونگی استفاده از افزونه اپلیکیشن مرورکردن صفحه "ابزار" است.</value>
<value>ساده ترین روش برای افزودن اطلاعات ورود به گاوصندوق از طریق افزونه اپلیکیشن Bitwarden است. برای اطلاع بیشتر از چگونگی استفاده از افزونه اپلیکیشن مرورکردن صفحه "ابزار" است.</value>
</data>
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
<value>با بیت واردن در سافاری و دیگر برنامه ها میتوانید از قابلیت پر کردن خودکار در ورودهایتان استفاده کنید.</value>
<value>با Bitwarden در سافاری و دیگر برنامه ها میتوانید از قابلیت پر کردن خودکار در ورودهایتان استفاده کنید.</value>
</data>
<data name="BitwardenAutofillService" xml:space="preserve">
<value>سرویس پرکردن خودکار بیت واردن</value>
<value>سرویس پرکردن خودکار Bitwarden</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription" xml:space="preserve">
<value>از قابلیت دسترسی بیت واردن برای تکمیل خودکار ورود به سیستم خود در سراسر برنامه ها و وب استفاده کنید.</value>
<value>از قابلیت دسترسی Bitwarden برای تکمیل خودکار ورود به سیستم خود در سراسر برنامه ها و وب استفاده کنید.</value>
</data>
<data name="ChangeEmail" xml:space="preserve">
<value>تغییر ایمیل</value>
@@ -436,7 +436,7 @@
<value>تغییر گذرواژه اصلی</value>
</data>
<data name="ChangePasswordConfirmation" xml:space="preserve">
<value>شما می توانید گذرواژه اصلی خود را در bitwarden.com تغییر دهید. آیا می خواهید از سایت بازدید کنید؟</value>
<value>شما می توانید گذرواژه اصلی خود را در bitwarden.com تغییر دهید. آیا میخواهید از سایت بازدید کنید؟</value>
</data>
<data name="Close" xml:space="preserve">
<value>بستن</value>
@@ -482,7 +482,7 @@
<value>افزونه اپلیکیشن را فعال کنید</value>
</data>
<data name="ExtensionInSafari" xml:space="preserve">
<value>در سافاری، بیت واردن را با استفاده از آیکون اشتراک گذاری پیدا کنید (راهنمایی: به سمت راست در ردیف پایین فهرست بروید).</value>
<value>در سافاری، Bitwarden را با استفاده از آیکون اشتراک گذاری پیدا کنید (راهنمایی: به سمت راست در ردیف پایین فهرست بروید).</value>
<comment>Safari is the name of apple's web browser</comment>
</data>
<data name="ExtensionInstantAccess" xml:space="preserve">
@@ -498,13 +498,13 @@
<value>اطلاعات ورود شما حالا از سافاری، کروم، و دیگر برنامه های پشتیبانی شده به راحتی قابل دسترسی است.</value>
</data>
<data name="ExtensionSetup2" xml:space="preserve">
<value>در سافاری و کروم، بیت واردن را با استفاده از آیکون اشتراک گذاری پیدا کنید (راهنمایی: به سمت راست در ردیف پایین فهرست بروید).</value>
<value>در سافاری و کروم، Bitwarden را با استفاده از آیکون اشتراک گذاری پیدا کنید (راهنمایی: به سمت راست در ردیف پایین فهرست بروید).</value>
</data>
<data name="ExtensionTapIcon" xml:space="preserve">
<value>برای راه اندازی افزونه به آیکون بیت واردن در منو ضربه بزنید.</value>
<value>برای راه اندازی افزونه به آیکون Bitwarden در منو ضربه بزنید.</value>
</data>
<data name="ExtensionTurnOn" xml:space="preserve">
<value>برای فعال سازی بیت واردن در سافاری و سایر برنامه ها، نماد "بیشتر" را در پایین ردیف منو ضربه بزنید.</value>
<value>برای فعال سازی Bitwarden در سافاری و سایر برنامه ها، نماد "بیشتر" را در پایین ردیف منو ضربه بزنید.</value>
</data>
<data name="Favorite" xml:space="preserve">
<value>مورد علاقه</value>
@@ -591,7 +591,7 @@
<value>تنظیمات بیشتر</value>
</data>
<data name="MustLogInMainApp" xml:space="preserve">
<value>شما بایستی به برنامه اصلی بیت واردن وارد شوید تا بتوانید از افزونه استفاده کنید.</value>
<value>شما بایستی به برنامه اصلی Bitwarden وارد شوید تا بتوانید از افزونه استفاده کنید.</value>
</data>
<data name="Never" xml:space="preserve">
<value>هرگز</value>
@@ -616,7 +616,7 @@
<comment>Confirmation, like "Ok, I understand it"</comment>
</data>
<data name="OptionDefaults" xml:space="preserve">
<value>گزینه های پیش فرض از ابزار تولید رمز عبور بیت واردن تنظیم شد.</value>
<value>گزینه های پیش فرض از ابزار تولید رمز عبور Bitwarden تنظیم شد.</value>
</data>
<data name="Options" xml:space="preserve">
<value>گزینه ها</value>
@@ -640,7 +640,7 @@
<value>آیا از بازنویسی بر روی رمز عبور فعلی مطمئن هستید؟</value>
</data>
<data name="PushNotificationAlert" xml:space="preserve">
<value>بیت واردن گاوصندوق شما را بصورت خودکار از طریق نشان دادن اطلاعیه ها به هنگام سازی میکند. برای بهترین تجربه کاربری ممکن، لطفاً زمانی که از شما پرسیده شد "مجاز" را سریعاً انتخاب کنید تا نمایش اعلانیه ها فعال شود.</value>
<value>Bitwarden گاوصندوق شما را بصورت خودکار از طریق نشان دادن اطلاعیه ها به هنگام سازی میکند. برای بهترین تجربه کاربری ممکن، لطفاً زمانی که از شما پرسیده شد "مجاز" را سریعاً انتخاب کنید تا نمایش اعلانیه ها فعال شود.</value>
<comment>Push notifications for apple products</comment>
</data>
<data name="RateTheApp" xml:space="preserve">
@@ -650,7 +650,7 @@
<value>لطفاً با یک بررسی خوب به ما کمک کنید!</value>
</data>
<data name="RateTheAppDescriptionAppStore" xml:space="preserve">
<value>رتبه بندی فروشگاه App Store با هر نسخه جدید از بیت واردن تنظیم می شود. لطفاً با بررسی خوب به ما کمک کنید!</value>
<value>رتبه بندی فروشگاه App Store با هر نسخه جدید از Bitwarden تنظیم می شود. لطفاً با بررسی خوب به ما کمک کنید!</value>
</data>
<data name="RegeneratePassword" xml:space="preserve">
<value>تولید رمز عبور</value>
@@ -674,7 +674,7 @@
<value>تعیین پین</value>
</data>
<data name="SetPINDirection" xml:space="preserve">
<value>یک کد پین 4 رقمی برای باز کردن برنامه وارد کنید.</value>
<value>یک پین کد 4 رقمی برای باز کردن برنامه وارد کنید.</value>
</data>
<data name="ItemInformation" xml:space="preserve">
<value>اطلاعات مورد</value>
@@ -707,13 +707,13 @@
<value>ورود دو مرحله ای</value>
</data>
<data name="TwoStepLoginConfirmation" xml:space="preserve">
<value>ورودی دو مرحله ای باعث می شود که حساب کاربری شما با استفاده از یک دستگاه دیگر مانند کلید امنیتی، برنامه تأیید هویت، پیامک، تماس تلفنی و یا ایمیل، اعتبار خود را با ایمنی بیشتر اثبات کند. ورودی دو مرحله ای می تواند در bitwarden.com فعال شود. آیا می خواهید از سایت بازدید کنید؟</value>
<value>ورود دو مرحله ای باعث می شود که حساب کاربری شما با استفاده از یک دستگاه دیگر مانند کلید امنیتی، برنامه تأیید هویت، پیامک، تماس تلفنی و یا ایمیل، اعتبار خود را با ایمنی بیشتر اثبات کند. ورود دو مرحله ای می تواند در bitwarden.com فعال شود. آیا میخواهید از سایت بازدید کنید؟</value>
</data>
<data name="UnlockWith" xml:space="preserve">
<value>باز کردن با {0}</value>
</data>
<data name="UnlockWithPIN" xml:space="preserve">
<value>باز کردن با کد پین</value>
<value>باز کردن با پین کد</value>
</data>
<data name="Validating" xml:space="preserve">
<value>اعتبار سنجی</value>
@@ -726,10 +726,10 @@
<value>مشاهده مورد</value>
</data>
<data name="WebVault" xml:space="preserve">
<value>گاوصندوق وب بیت واردن</value>
<value>گاوصندوق وب Bitwarden</value>
</data>
<data name="WebVaultDescription" xml:space="preserve">
<value>مورد های خود را از هر مرورگر وب با گاوصندوق وب بیت واردن مدیریت کنید.</value>
<value>مورد های خود را از هر مرورگر وب با گاوصندوق وب Bitwarden مدیریت کنید.</value>
</data>
<data name="Lost2FAApp" xml:space="preserve">
<value>برنامه تأیید کننده از دست رفته؟</value>
@@ -756,7 +756,7 @@
<comment>This is used for the autofill service. ex. "There are no items in your vault for twitter.com".</comment>
</data>
<data name="BitwardenAutofillServiceNotification" xml:space="preserve">
<value>زمانی که شما یک اطلاع رسانی پر کردن خودکار بیت واردن را میبینید، میتوانید برای اجرای پر کردن خودکار ضربه بزنید.</value>
<value>زمانی که شما یک اطلاع رسانی پر کردن خودکار Bitwarden را میبینید، میتوانید برای اجرای پر کردن خودکار ضربه بزنید.</value>
</data>
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
<value>برای پر کردن خودکار یک اطلاع رسانی در گاوصندوقتان این اطلاع رسانی را ضربه بزنید.</value>
@@ -765,7 +765,7 @@
<value>باز کردن تنظیمات دستیابی</value>
</data>
<data name="BitwardenAutofillServiceStep1" xml:space="preserve">
<value>1. در صفحه تنظیمات دستیابی اندروید، "بیت واردن" را در قسمت سرویس ها لمس کنید.</value>
<value>1. در صفحه تنظیمات دستیابی اندروید، "Bitwarden" را در قسمت سرویس ها لمس کنید.</value>
</data>
<data name="BitwardenAutofillServiceStep2" xml:space="preserve">
<value>۲. روشن کردن را انتخاب کنید و تأیید را بفشارید.</value>
@@ -783,7 +783,7 @@
<value>آزمایشی</value>
</data>
<data name="BitwardenAutofillServiceAlert" xml:space="preserve">
<value>ساده ترین روش برای افزودن اطلاعات ورود به گاوصندوقتان از سرویس پر کردن خودکار بیت واردن است. برای اطلاعات بیشتر درباره استفاده از سرویس پر کردن خودکار بیت واردن است مرور کردن صفحه "ابزار" است.</value>
<value>ساده ترین روش برای افزودن اطلاعات ورود به گاوصندوقتان از سرویس پر کردن خودکار Bitwarden است. برای اطلاعات بیشتر درباره استفاده از سرویس پر کردن خودکار Bitwarden است مرور کردن صفحه "ابزار" است.</value>
</data>
<data name="Autofill" xml:space="preserve">
<value>پر کردن خودکار</value>
@@ -813,19 +813,19 @@
<value>ایجاد یک تشکیلات برای اشتراک گذاری ایمن موارد خود با سایر کاربران.</value>
</data>
<data name="DisableGADescription" xml:space="preserve">
<value>ما از آنالیز استفاده می کنیم که بهتر بفهمیم چگونه برنامه استفاده می شود تا بتوانیم آن را بهتر کنیم. تمام داده های جمع آوری شده کاملاً ناشناس است.</value>
<value>ما از آنالیزها جهت درک بهتر چگونگی استفاده از برنامه بهره میبریم تا بتوانیم آن را بهبود ببخشیم. تمام داده های جمع آوری شده کاملاً ناشناس است.</value>
</data>
<data name="AutofillPasswordField" xml:space="preserve">
<value>اسکن زمانی که در فیلد پسورد متمرکز شده</value>
</data>
<data name="AutofillPasswordFieldDescription" xml:space="preserve">
<value>فقط صفحه را اسکن میکند برای فیلدها و پیشنهاد یک پر کردن خودکار هر چند که شما یک فیلد رمز عبور را انتخاب کرده باشید. این تنظیم به افزایش عمر باتری کمک میکند.</value>
<value>فقط صفحه را برای فیلدها و پیشنهاد دادن پر کردن خودکار اسکن میکند هر حتی اگر شما یک فیلد رمز عبور را انتخاب کرده باشید. این تنظیم به افزایش عمر باتری کمک میکند.</value>
</data>
<data name="AutofillPersistNotification" xml:space="preserve">
<value>اطلاعیه ثابت</value>
</data>
<data name="AutofillPersistNotificationDescription" xml:space="preserve">
<value>همیشه یک پر کردن خودکار را اطلاع میدهد و فقط برای فیلدها بعد از تلاش برای پر کردن خودکار اسکن میکند. این تنظیم ممکن است در صرفه جویی باتری موثر باشد.</value>
<value>همیشه یک پر کردن خودکار را اطلاع میدهد و فقط بعد از تلاش برای پر کردن خودکار فیلدها اقدام به اسکن میکند. این تنظیم ممکن است در صرفه جویی باتری موثر باشد.</value>
</data>
<data name="AutofillAlways" xml:space="preserve">
<value>همیشه اسکن کن</value>
@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>کلید امنیتی YubiKey</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>افزودن پیوست جدید</value>
@@ -944,7 +944,7 @@
<value>کپی TOTP</value>
</data>
<data name="DisableAutoTotpCopyDescription" xml:space="preserve">
<value>اگر ورود شما دارای یک کلید تأیید کننده است که به آن متصل شده است، هر زمان که بصورت خودکار وارد سایت شوید کد تأیید TOTP به صورت خودکار به کلیپ بورد شما کپی می شود.</value>
<value>اگر ورود شما دارای یک کلید تأیید کننده میباشد که به آن متصل شده است، هر زمان که بصورت خودکار وارد سایت شوید کد تأیید TOTP به صورت خودکار به کلیپ بورد شما کپی می شود.</value>
</data>
<data name="DisableAutoTotpCopy" xml:space="preserve">
<value>غیرفعال کردن کپی خودکار TOTP</value>
@@ -1009,7 +1009,7 @@
<value>محیط خود میزبان</value>
</data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>آدرس اینترنتی پایه فرضی نصب بیت واردن میزبانی شده را مشخص کنید.</value>
<value>آدرس اینترنتی پایه فرضی نصب Bitwarden میزبانی شده را مشخص کنید.</value>
</data>
<data name="ServerUrl" xml:space="preserve">
<value>آدرس اینترنتی سرور</value>
@@ -1174,7 +1174,7 @@
<value>آدرس سرور آیکون ها</value>
</data>
<data name="AutofillWithBitwarden" xml:space="preserve">
<value>پر کردن خودکار با بیت واردن</value>
<value>پر کردن خودکار با Bitwarden</value>
</data>
<data name="VaultIsLocked" xml:space="preserve">
<value>گاوصندوق قفل شد</value>
@@ -1195,10 +1195,10 @@
<value>سرویس دستیابی به پر کردن خودکار</value>
</data>
<data name="AutofillServiceDescription" xml:space="preserve">
<value>سرویس خودکار بیت واردن با استفاده از چهار چوب پر کردن خودکار اندروید برای کمک به پر کردن ورودی ها، کارت های اعتباری و اطلاعات هویت به سایر برنامه ها در دستگاه شما کمک می کند.</value>
<value>سرویس خودکار Bitwarden با استفاده از چهار چوب پر کردن خودکار اندروید برای کمک به پر کردن ورودی ها، کارت های اعتباری و اطلاعات هویت به سایر برنامه ها در دستگاه شما کمک می کند.</value>
</data>
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
<value>از سرویس پر کردن خودکار بیت واردن برای پر کردن ورودها، کارتهای اعتباری، و اطلاعات هویتی درون اپلیکیشن ها استفاده کنید.</value>
<value>از سرویس پر کردن خودکار Bitwarden برای پر کردن ورودها، کارتهای اعتباری، و اطلاعات هویتی درون اپلیکیشن ها استفاده کنید.</value>
</data>
<data name="BitwardenAutofillServiceOpenAutofillSettings" xml:space="preserve">
<value>باز کردن تنظیمات پر کردن خودکار</value>
@@ -1283,4 +1283,34 @@
<value>تشخیص سابقه</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>بله، و ذخیره</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>پر کردن خودکار و ذخیره</value>
</data>
<data name="Organization" xml:space="preserve">
<value>سازماندهی</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Yubikey خود را در نزدیکی بالای دستگاه نگه دارید.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>دوباره امتحان کنید</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>برای ادامه، دوباره YubiKey NEO خود را پشت دستگاه نگه دارید.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>خدمات دسترسی ممکن است مفید باشد برای استفاده در زمانی که برنامه از سرویس پر کردن خودکار استاندارد پشتیبانی نمی کند.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>گذرواژه بروز رسانی شد</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>بروزرسانی شد</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -132,7 +132,7 @@
<comment>The title for the add item page.</comment>
</data>
<data name="AnErrorHasOccurred" xml:space="preserve">
<value>Tapahtui virhe</value>
<value>Tapahtui virhe.</value>
<comment>Alert title when something goes wrong.</comment>
</data>
<data name="Back" xml:space="preserve">
@@ -140,7 +140,7 @@
<comment>Navigate back to the previous screen.</comment>
</data>
<data name="Bitwarden" xml:space="preserve">
<value>bitwarden</value>
<value>Bitwarden</value>
<comment>App name. Shouldn't ever change.</comment>
</data>
<data name="Cancel" xml:space="preserve">
@@ -168,7 +168,7 @@
<comment>Delete an entity (verb).</comment>
</data>
<data name="Deleting" xml:space="preserve">
<value>Poistetaan...</value>
<value>Poistetaan</value>
<comment>Message shown when interacting with the server</comment>
</data>
<data name="DoYouReallyWantToDelete" xml:space="preserve">
@@ -193,7 +193,7 @@
<value>Lähetä sähköpostia</value>
</data>
<data name="EmailUsDescription" xml:space="preserve">
<value>Lähetä meille sähköpostia saadaksesi tukea tai jättääksesi palautetta.</value>
<value>Lähetä meille sähköpostia saadaksesi apua tai jättääksesi palautetta.</value>
</data>
<data name="EnterPIN" xml:space="preserve">
<value>Syötä PIN-koodisi.</value>
@@ -209,7 +209,7 @@
<value>Jätä ilmoitus GitHub-pakettivarastoomme.</value>
</data>
<data name="FingerprintDirection" xml:space="preserve">
<value>Käytä sormenjälkeäsi tunnistautuaksesi.</value>
<value>Tunnistaudu sormenjäljelläsi.</value>
</data>
<data name="Folder" xml:space="preserve">
<value>Kansio</value>
@@ -261,11 +261,11 @@
<comment>The button text that allows user to launch the website to their web browser.</comment>
</data>
<data name="LogIn" xml:space="preserve">
<value>Kirjaudu</value>
<value>Kirjaudu sisään</value>
<comment>The login button text (verb).</comment>
</data>
<data name="LogInNoun" xml:space="preserve">
<value>Kirjaudu sisään</value>
<value>Käyttäjätunnus</value>
<comment>Title for login page. (noun)</comment>
</data>
<data name="LogOut" xml:space="preserve">
@@ -303,7 +303,7 @@
<comment>Acknowledgement.</comment>
</data>
<data name="DisableGA" xml:space="preserve">
<value>Älä käytä Analyticsiä</value>
<value>Älä osallistu tiedonkeruuseen</value>
</data>
<data name="Password" xml:space="preserve">
<value>Salasana</value>
@@ -314,7 +314,7 @@
<comment>Button text for a save operation (verb).</comment>
</data>
<data name="Saving" xml:space="preserve">
<value>Tallennetaan...</value>
<value>Tallennetaan</value>
<comment>Message shown when interacting with the server</comment>
</data>
<data name="Settings" xml:space="preserve">
@@ -330,7 +330,7 @@
<comment>Confirmation message after successfully deleting a login.</comment>
</data>
<data name="Submit" xml:space="preserve">
<value>Lähetä</value>
<value>Jatka</value>
</data>
<data name="Sync" xml:space="preserve">
<value>Synkronointi</value>
@@ -348,14 +348,14 @@
<comment>Label for a uri/url.</comment>
</data>
<data name="UseFingerprintToUnlock" xml:space="preserve">
<value>Käytä sormenjälkeä avataksesi</value>
<value>Avaa holvi sormenjäljellä</value>
</data>
<data name="Username" xml:space="preserve">
<value>Käyttäjänimi</value>
<comment>Label for a username.</comment>
</data>
<data name="ValidationFieldRequired" xml:space="preserve">
<value>Kenttä "{0}" vaaditaan.</value>
<value>Kenttä {0} vaaditaan.</value>
<comment>Validation message for when a form field is left blank and is required to be entered.</comment>
</data>
<data name="ValueHasBeenCopied" xml:space="preserve">
@@ -381,10 +381,10 @@
<value>Käy sivustollamme</value>
</data>
<data name="VisitOurWebsiteDescription" xml:space="preserve">
<value>Käy sivustollamme, jossa voit saada apua bitwardenin käyttämisessä, lukea palvelun uutisia tai lähettää meille sähköpostia.</value>
<value>Käy sivustollamme, jossa voit saada apua Bitwardenin käyttämisessä, lukea palvelun uutisia tai lähettää meille sähköpostia.</value>
</data>
<data name="Website" xml:space="preserve">
<value>Verkko-osoite</value>
<value>SIvusto</value>
<comment>Label for a website.</comment>
</data>
<data name="Yes" xml:space="preserve">
@@ -403,7 +403,7 @@
<value>Sovelluslaajennus</value>
</data>
<data name="AutofillAccessibilityDescription" xml:space="preserve">
<value>Use the bitwarden accessibility service to auto-fill your logins across apps and the web.</value>
<value>Käytä Bitwardenin esteettömyyspalvelua kirjautumiskenttien automaattiseen täyttämiseen sovelluksissa ja verkossa.</value>
</data>
<data name="AutofillService" xml:space="preserve">
<value>Automaattinen täyttö palvelu</value>
@@ -421,7 +421,7 @@
<value>Käytä bitwardenia Safarissa ja muissa sovelluksissa kirjautumistietojen automaattiseen täydennykseen.</value>
</data>
<data name="BitwardenAutofillService" xml:space="preserve">
<value>bitwardenin automaattinen täydennys</value>
<value>Bitwardenin automaattinen täyttö palvelu</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription" xml:space="preserve">
<value>Use the bitwarden accessibility service to auto-fill your logins.</value>
@@ -460,7 +460,7 @@
<value>Luo tili</value>
</data>
<data name="CreatingAccount" xml:space="preserve">
<value>Luodaan tiliä...</value>
<value>Luodaan tiliä</value>
<comment>Message shown when interacting with the server</comment>
</data>
<data name="EditItem" xml:space="preserve">
@@ -470,7 +470,7 @@
<value>Käytä automaattista synkronointia</value>
</data>
<data name="EnterEmailForHint" xml:space="preserve">
<value>Syötä tilisi sähköpostiosoite saadaksesi pääsalasanan vihjeen.</value>
<value>Syötä tilisi sähköpostiosoite saadaksesi pääsalasanasi vihjeen.</value>
</data>
<data name="ExntesionReenable" xml:space="preserve">
<value>Käytä sovelluslaajennusta</value>
@@ -555,7 +555,7 @@
<value>Lukitseminen</value>
</data>
<data name="LoggingIn" xml:space="preserve">
<value>Kirjaudutaan sisään...</value>
<value>Kirjaudutaan sisään</value>
<comment>Message shown when interacting with the server</comment>
</data>
<data name="LoginOrCreateNewAccount" xml:space="preserve">
@@ -609,7 +609,7 @@
<value>Holvissasi ei ole kohteita tälle sivustolle. Napauta lisätäksesi kohteen.</value>
</data>
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
<value>Tälle kohteelle ei ole määritetty käyttäjänimeä tai salasanaa.</value>
<value>Tälle käyttäjätunnukselle ei ole määritetty käyttäjänimeä tai salasanaa.</value>
</data>
<data name="OkGotIt" xml:space="preserve">
<value>Ymmärrän!</value>
@@ -619,7 +619,7 @@
<value>Oletusvalinnat määritetään pääsovelluksen salasanageneraattorista.</value>
</data>
<data name="Options" xml:space="preserve">
<value>Valinnat</value>
<value>Asetukset</value>
</data>
<data name="Other" xml:space="preserve">
<value>Muut</value>
@@ -650,7 +650,7 @@
<value>Harkitsethan auttamistamme jättämällä positiivisen arvostelun!</value>
</data>
<data name="RateTheAppDescriptionAppStore" xml:space="preserve">
<value>Arvostelut nollautuvat App Storessa bitwardenin joka päivityksen yhteydessä. Harkitsethan auttamistamme jättämällä positiivisen arvostelun!</value>
<value>App Storen arvostelut nollautuvat Bitwardenin jokaisen päivityksen yhteydessä. Autathan meitä jättämällä hyvän arvostelun!</value>
</data>
<data name="RegeneratePassword" xml:space="preserve">
<value>Luo uusi salasana</value>
@@ -674,7 +674,7 @@
<value>Aseta PIN</value>
</data>
<data name="SetPINDirection" xml:space="preserve">
<value>Aseta 4-numeroinen PIN-koodi, jonka avulla voit avata sovelluksen.</value>
<value>Syötä 4-numeroinen PIN-koodi, jonka avulla voit avata sovelluksen.</value>
</data>
<data name="ItemInformation" xml:space="preserve">
<value>Kohteen tiedot</value>
@@ -683,11 +683,11 @@
<value>Kohde päivitetty.</value>
</data>
<data name="Submitting" xml:space="preserve">
<value>Käsitellään...</value>
<value>Käsitellään</value>
<comment>Message shown when interacting with the server</comment>
</data>
<data name="Syncing" xml:space="preserve">
<value>Synkronoidaan...</value>
<value>Synkronoidaan</value>
<comment>Message shown when interacting with the server</comment>
</data>
<data name="SyncingComplete" xml:space="preserve">
@@ -710,7 +710,7 @@
<value>Kaksivaiheinen kirjautuminen tekee tilistäsi turvallisemman vaatimalla koodin tunnistautumispalvelusta joka kirjautumiskerralla. Voit ottaa kaksivaiheisen tunnistautumisen käyttöön bitwarden.com-verkkoholvissa. Haluatko käydä sivustolla nyt?</value>
</data>
<data name="UnlockWith" xml:space="preserve">
<value>Avaa käyttäen: {0}</value>
<value>Avaa sormenjäljellä</value>
</data>
<data name="UnlockWithPIN" xml:space="preserve">
<value>Avaa PIN-koodilla</value>
@@ -720,19 +720,19 @@
<comment>Message shown when interacting with the server</comment>
</data>
<data name="VerificationCode" xml:space="preserve">
<value>Tunnistautumiskoodi</value>
<value>Vahvistuskoodi</value>
</data>
<data name="ViewItem" xml:space="preserve">
<value>Näytä kohde</value>
</data>
<data name="WebVault" xml:space="preserve">
<value>bitwardenin verkkoholvi</value>
<value>Bitwardenin verkkoholvi</value>
</data>
<data name="WebVaultDescription" xml:space="preserve">
<value>Hallitse kirjautumistietojasi millä tahansa selaimella bitwarden-verkkoholvissa.</value>
<value>Hallitse kohteitasi millä tahansa selaimella Bitwardenin verkkoholvissa.</value>
</data>
<data name="Lost2FAApp" xml:space="preserve">
<value>Etkö pääse tunnistautumispalveluun?</value>
<value>Etkö pysty käyttämään todennussovellustasi?</value>
</data>
<data name="Items" xml:space="preserve">
<value>Kohteet</value>
@@ -765,10 +765,10 @@
<value>Avaa esteettömyysasetukset</value>
</data>
<data name="BitwardenAutofillServiceStep1" xml:space="preserve">
<value>1. Esteettömyysasetuksissa valitse Palvelut-otsikon alta "bitwarden".</value>
<value>1. Valitse esteettömyysasetuksissa Palvelut-otsikon alta ”Bitwarden.</value>
</data>
<data name="BitwardenAutofillServiceStep2" xml:space="preserve">
<value>2. Laita asetus päälle ja paina OK hyväksyäksesi.</value>
<value>2. Laita asetus päälle ja paina OK-painiketta hyväksyäksesi.</value>
</data>
<data name="Disabled" xml:space="preserve">
<value>Pois käytöstä</value>
@@ -783,7 +783,7 @@
<value>Beeta</value>
</data>
<data name="BitwardenAutofillServiceAlert" xml:space="preserve">
<value>Helpoin tapa lisätä uusia kirjautumistietoja holviisi on käyttää bitwardenin automaattista täydennystä. Lue lisää täydennyspalvelusta "Työkalut"-kohdassa.</value>
<value>Helpoin tapa lisätä uusia käyttäjätunnuksia holviisi on käyttää Bitwardenin automaattinen täyttö palvelua. Lue lisää palvelusta Työkalut-kohdassa.</value>
</data>
<data name="Autofill" xml:space="preserve">
<value>Täytä automaattisesti</value>
@@ -816,7 +816,7 @@
<value>Hyödynnämme analytiikkaa saadaksemme tietoa siitä, kuinka sovellusta käytetään. Näin voimme kehittää sitä paremmaksi. Kaikki tiedonkeruu on täysin nimetöntä.</value>
</data>
<data name="AutofillPasswordField" xml:space="preserve">
<value>Skannaa, kun salasanakenttä on aktiivinen</value>
<value>Lue, kun salasanakenttä on aktiivinen</value>
</data>
<data name="AutofillPasswordFieldDescription" xml:space="preserve">
<value>Skannaa kentät ja näytä ilmoitus automaattisesta täydentämisestä vain silloin, kun valitset salasanakentän. Tämä asetus saattaa vähentää virrankulutusta.</value>
@@ -834,7 +834,7 @@
<value>Skannaa ruutua kenttien varalta ja näytä ilmoitus automaattisesta täydentämisestä, kun salasanakenttä löytyy. Tämä on oletusasetus.</value>
</data>
<data name="CannotOpenApp" xml:space="preserve">
<value>Sovelluksen "{0}" avaaminen ei onnistu.</value>
<value>Sovelluksen {0} avaaminen ei onnistunut.</value>
<comment>Message shown when trying to launch an app that does not exist on the user's device.</comment>
</data>
<data name="AuthenticatorAppTitle" xml:space="preserve">
@@ -886,8 +886,8 @@
<value>Hold your YubiKey NEO against the back of the device to continue.</value>
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey NEO Security Key</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<value>YubiKey-todennuslaite</value>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Lisää uusi liite</value>
@@ -977,7 +977,7 @@
<value>Toiminto ei ole käytettävissä</value>
</data>
<data name="MaxFileSize" xml:space="preserve">
<value>Tiedoston enimmäiskoko on 100 MB.</value>
<value>Tiedoston enimmäiskoko on 100 MB.</value>
</data>
<data name="UpdateKey" xml:space="preserve">
<value>Et voi käyttää tätä toimintoa ennen kuin päivität salausavaimesi.</value>
@@ -998,7 +998,7 @@
<value>Ohjelmistoympäristön URL:t tallennettu.</value>
</data>
<data name="FormattedIncorrectly" xml:space="preserve">
<value>{0} is not correctly formatted.</value>
<value>{0} on väärässä muodossa.</value>
<comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment>
</data>
<data name="IdentityUrl" xml:space="preserve">
@@ -1009,7 +1009,7 @@
<value>Itse ylläpidetty ohjelmistoympäristö</value>
</data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Specify the base URL of your on-premise hosted bitwarden installation.</value>
<value>Syötä omalla palvelimella ylläpitämäsi Bitwarden-asennuksen kanta-URL.</value>
</data>
<data name="ServerUrl" xml:space="preserve">
<value>Palvelimen URL</value>
@@ -1018,7 +1018,7 @@
<value>Verkkoholvipalvelimen URL</value>
</data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
<value>Napauta tätä ilmoitusta näyttääksesi holvisi kohteet.</value>
</data>
<data name="CustomFields" xml:space="preserve">
<value>Lisäkentät</value>
@@ -1174,7 +1174,7 @@
<value>Kuvakepalvelimen URL</value>
</data>
<data name="AutofillWithBitwarden" xml:space="preserve">
<value>Auto-fill with bitwarden</value>
<value>Täytä automaattisesti Bitwardenilla</value>
</data>
<data name="VaultIsLocked" xml:space="preserve">
<value>Holvi on lukittu</value>
@@ -1198,7 +1198,7 @@
<value>The bitwarden auto-fill service uses the Android Autofill Framework to assist in filling logins, credit cards, and identity information into other apps on your device.</value>
</data>
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
<value>Käytä bitwardenin esteettömyyspalvelua kirjautumistietojesi automaattiseen täydennykseen.</value>
<value>Käytä Bitwardenin esteettömyyspalvelua täyttääksesi automaattisesti käyttäjätunnukset, kortti- ja henkilöllisyystiedot muihin sovelluksiin.</value>
</data>
<data name="BitwardenAutofillServiceOpenAutofillSettings" xml:space="preserve">
<value>Avaa automaattisen täytön asetukset</value>
@@ -1211,13 +1211,13 @@
<value>Käytä Face ID:tä tunnistautuaksesi.</value>
</data>
<data name="UseFaceIDToUnlock" xml:space="preserve">
<value>Käytä Face ID:tä avataksesi holvin</value>
<value>Avaa holvi Face ID:llä</value>
</data>
<data name="VerifyFaceID" xml:space="preserve">
<value>Varmista Face ID</value>
<value>Tunnistaudu Face ID:llä</value>
</data>
<data name="UseWindowsHelloToUnlock" xml:space="preserve">
<value>Käytä Windows Helloa avataksesi holvin</value>
<value>Avaa holvi Windows Hellolla</value>
</data>
<data name="VerifyWindowsHello" xml:space="preserve">
<value>Tunnistaudu Windows Hellolla</value>
@@ -1229,58 +1229,88 @@
<value>Androidin automaattisen täytön asetusten avaaminen epäonnistui. Voit mennä sinne manuaalisesti näin: Asetukset &gt; Järjestelmä &gt; Kielet ja syöttötapa &gt; Lisäasetukset &gt; Automaattinen täyttö palvelu.</value>
</data>
<data name="CustomFieldName" xml:space="preserve">
<value>Custom Field Name</value>
<value>Lisäkentän nimi</value>
</data>
<data name="FieldTypeBoolean" xml:space="preserve">
<value>Boolean</value>
<value>Valintaruutu</value>
</data>
<data name="FieldTypeHidden" xml:space="preserve">
<value>Hidden</value>
<value>Piilotettu teksti</value>
</data>
<data name="FieldTypeText" xml:space="preserve">
<value>Text</value>
<value>Teksti</value>
</data>
<data name="NewCustomField" xml:space="preserve">
<value>New Custom Field</value>
<value>Uusi lisäkenttä</value>
</data>
<data name="SelectTypeField" xml:space="preserve">
<value>What type of custom field do you want to add?</value>
<value>Minkä tyyppisen lisäkentän haluat lisätä?</value>
</data>
<data name="Remove" xml:space="preserve">
<value>Remove</value>
<value>Poista</value>
</data>
<data name="NewUri" xml:space="preserve">
<value>New URI</value>
<value>Uusi URI</value>
</data>
<data name="URIPosition" xml:space="preserve">
<value>URI {0}</value>
<comment>Label for a uri/url with position. i.e. URI 1, URI 2, etc</comment>
</data>
<data name="BaseDomain" xml:space="preserve">
<value>Base domain</value>
<value>Pääverkkotunnus</value>
</data>
<data name="Default" xml:space="preserve">
<value>Default</value>
<value>Oletus</value>
</data>
<data name="Exact" xml:space="preserve">
<value>Exact</value>
<value>Täsmälleen…</value>
</data>
<data name="Host" xml:space="preserve">
<value>Host</value>
<value>Osoite</value>
<comment>A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'.</comment>
</data>
<data name="RegEx" xml:space="preserve">
<value>Regular expression</value>
<value>Säännöllinen lauseke</value>
<comment>A programming term, also known as 'RegEx'.</comment>
</data>
<data name="StartsWith" xml:space="preserve">
<value>Starts with</value>
<value>Alkaa…</value>
</data>
<data name="URIMatchDetection" xml:space="preserve">
<value>URI Match Detection</value>
<value>URIn tunnistustapa</value>
</data>
<data name="MatchDetection" xml:space="preserve">
<value>Match Detection</value>
<value>Tunnistustapa</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Hold your Yubikey near the top of the device.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>The accessibility service may be helpful to use when apps do not support the standard auto-fill service.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Password Updated</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Updated</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>Clé de sécurité YubiKey NEO</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Ajouter une nouvelle pièce jointe</value>
@@ -1283,4 +1283,34 @@
<value>Détection de correspondance</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Oui et enregistrer</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Autocomplétion et enregistrer</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organisation</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Gardez votre Yubikey près du haut de l'appareil.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Réessayez</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Pour continuer, gardez votre Yubikey NEO à l'arrière de l'appareil.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Le service d'accessibilité peut être utile lorsque des applis ne supportent pas le service d'autocomplétion de base.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Mot de passe mis à jour</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Mis à jour</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey NEO Security Key</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Add New Attachment</value>
@@ -1283,4 +1283,34 @@
<value>Match Detection</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Hold your Yubikey near the top of the device.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>The accessibility service may be helpful to use when apps do not support the standard auto-fill service.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Password Updated</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Updated</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey NEO sigurnosni ključ</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Dodavanje novog privitka</value>
@@ -1283,4 +1283,34 @@
<value>Otkrivanje podudaranja</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Da, i spremi</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Automatski popuni i spremi</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organizacija</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Držite Yubikey blizu vrha uređaja.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Pokušajte ponovno</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Da biste nastavili, držite YubiKey NEO na stražnjoj strani uređaja.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Usluga pristupačnosti može biti korisna kada aplikacije ne podržavaju standardnu uslugu automatskog popunjavanja.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Password Updated</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Updated</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey NEO biztonsági kulcs</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Melléklet hozzáadása</value>
@@ -1229,58 +1229,88 @@
<value>Nem sikerült automatikusan megnyitni az Android automatikus kitöltés beállításai menüt. A beállítás megnyitásához nyitsd meg a Beállítások &gt; Rendszer &gt; Nyelv és bevitel &gt; Speciális &gt; Automatikus kitöltés menüpontot.</value>
</data>
<data name="CustomFieldName" xml:space="preserve">
<value>Custom Field Name</value>
<value>Egyéni mező neve</value>
</data>
<data name="FieldTypeBoolean" xml:space="preserve">
<value>Boolean</value>
<value>Logikai</value>
</data>
<data name="FieldTypeHidden" xml:space="preserve">
<value>Hidden</value>
<value>Rejtett</value>
</data>
<data name="FieldTypeText" xml:space="preserve">
<value>Text</value>
<value>Szöveg</value>
</data>
<data name="NewCustomField" xml:space="preserve">
<value>New Custom Field</value>
<value>Új egyedi mező</value>
</data>
<data name="SelectTypeField" xml:space="preserve">
<value>What type of custom field do you want to add?</value>
<value>Milyen típusú egyéni mező szeretné hozzáadni?</value>
</data>
<data name="Remove" xml:space="preserve">
<value>Remove</value>
<value>Eltávolít</value>
</data>
<data name="NewUri" xml:space="preserve">
<value>New URI</value>
<value>Új URI</value>
</data>
<data name="URIPosition" xml:space="preserve">
<value>URI {0}</value>
<comment>Label for a uri/url with position. i.e. URI 1, URI 2, etc</comment>
</data>
<data name="BaseDomain" xml:space="preserve">
<value>Base domain</value>
<value>Alap domain</value>
</data>
<data name="Default" xml:space="preserve">
<value>Default</value>
<value>Alapértelmezett</value>
</data>
<data name="Exact" xml:space="preserve">
<value>Exact</value>
<value>Pontos</value>
</data>
<data name="Host" xml:space="preserve">
<value>Host</value>
<value>Hoszt</value>
<comment>A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'.</comment>
</data>
<data name="RegEx" xml:space="preserve">
<value>Regular expression</value>
<value>Reguláris kifejezés</value>
<comment>A programming term, also known as 'RegEx'.</comment>
</data>
<data name="StartsWith" xml:space="preserve">
<value>Starts with</value>
<value>Ezzel kezdődik</value>
</data>
<data name="URIMatchDetection" xml:space="preserve">
<value>URI Match Detection</value>
<value>URI találatfelismerés</value>
</data>
<data name="MatchDetection" xml:space="preserve">
<value>Match Detection</value>
<value>Találatfelismerés</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Igen, és mentés</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Automatikus kitöltés és mentés</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Szervezet</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Tartsd lenyomva a Yubikey-t, a készülék tetején.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Próbáld újra</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>A folytatáshoz tartsd lenyomva a YubiKey NEO-t a készülék hátoldalán.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>A kisegítő szolgáltatás használata hasznos lehet, ha az alkalmazások nem támogatják a szabványos automatikus kitöltési szolgáltatást.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Password Updated</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Updated</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -140,7 +140,7 @@
<comment>Navigate back to the previous screen.</comment>
</data>
<data name="Bitwarden" xml:space="preserve">
<value>bitwarden</value>
<value>Bitwarden</value>
<comment>App name. Shouldn't ever change.</comment>
</data>
<data name="Cancel" xml:space="preserve">
@@ -381,7 +381,7 @@
<value>Kunjungi Situs Web Kami</value>
</data>
<data name="VisitOurWebsiteDescription" xml:space="preserve">
<value>Kunjungi situs web kami untuk mendapatkan bantuan, berita, email kami, dan/atau mempelajari lebih lanjut tentang bagaimana menggunakan bitwarden.</value>
<value>Kunjungi situs web kami untuk mendapatkan bantuan, berita, email kami, dan/atau mempelajari lebih lanjut tentang bagaimana menggunakan Bitwarden.</value>
</data>
<data name="Website" xml:space="preserve">
<value>Situs web</value>
@@ -403,7 +403,7 @@
<value>Ekstensi Aplikasi</value>
</data>
<data name="AutofillAccessibilityDescription" xml:space="preserve">
<value>Gunakan layanan aksesibilitas bitwarden untuk mengisi otomatis info masuk Anda di seluruh aplikasi dan web.</value>
<value>Gunakan layanan aksesibilitas Bitwarden untuk mengisi otomatis info masuk Anda di seluruh aplikasi dan web.</value>
</data>
<data name="AutofillService" xml:space="preserve">
<value>Layanan Pengisian Otomatis</value>
@@ -412,19 +412,19 @@
<value>Hindari Karakter Ambigu</value>
</data>
<data name="BitwardenAppExtension" xml:space="preserve">
<value>ekstensi Aplikasi bitwarden</value>
<value>Ekstensi Aplikasi Bitwarden</value>
</data>
<data name="BitwardenAppExtensionAlert" xml:space="preserve">
<value>Cara termudah untuk menambahkan log masuk baru ke brankas Anda adalah dari Ekstensi Aplikasi bitwarden. Pelajari lebih lanjut tentang menggunakan Ekstensi Aplikasi bitwarden dengan menavigasi ke layar "Alat".</value>
<value>Cara termudah untuk menambahkan info masuk baru ke brankas Anda adalah dari Ekstensi Aplikasi Bitwarden. Pelajari lebih lanjut tentang menggunakan Ekstensi Aplikasi Bitwarden dengan menavigasi ke layar "Alat".</value>
</data>
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
<value>Gunakan bitwarden di Safari dan aplikasi lainnya untuk mengisi otomatis log masuk Anda.</value>
<value>Gunakan Bitwarden di Safari dan aplikasi lainnya untuk mengisi otomatis info masuk Anda.</value>
</data>
<data name="BitwardenAutofillService" xml:space="preserve">
<value>Layanan Pengisian Otomatis bitwarden</value>
<value>Layanan Pengisian Otomatis Bitwarden</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription" xml:space="preserve">
<value>Gunakan layanan aksesibilitas bitwarden untuk mengisi otomatis info masuk Anda.</value>
<value>Gunakan layanan aksesibilitas Bitwarden untuk mengisi otomatis info masuk Anda.</value>
</data>
<data name="ChangeEmail" xml:space="preserve">
<value>Ubah Email</value>
@@ -482,7 +482,7 @@
<value>Aktifkan Ekstensi Aplikasi</value>
</data>
<data name="ExtensionInSafari" xml:space="preserve">
<value>Pada Safari, temukan bitwarden menggunakan ikon berbagi (petunjuk: gulir ke kanan di baris bawah menu).</value>
<value>Pada Safari, temukan Bitwarden menggunakan ikon berbagi (petunjuk: gulir ke kanan di baris bawah menu).</value>
<comment>Safari is the name of apple's web browser</comment>
</data>
<data name="ExtensionInstantAccess" xml:space="preserve">
@@ -498,13 +498,13 @@
<value>Info masuk Anda sekarang bisa diakses dengan mudah dari Safari, Chrome, dan aplikasi lain yang didukung.</value>
</data>
<data name="ExtensionSetup2" xml:space="preserve">
<value>Pada Safari dan Chrome, temukan bitwarden menggunakan ikon berbagi (petunjuk: gulir ke kanan di baris bawah menu).</value>
<value>Pada Safari dan Chrome, temukan Bitwarden menggunakan ikon berbagi (petunjuk: gulir ke kanan di baris bawah menu).</value>
</data>
<data name="ExtensionTapIcon" xml:space="preserve">
<value>Ketuk ikon bitwarden pada menu untuk menjalankan ekstensi.</value>
<value>Ketuk ikon Bitwarden pada menu untuk menjalankan ekstensi.</value>
</data>
<data name="ExtensionTurnOn" xml:space="preserve">
<value>Untuk mengaktifkan bitwarden di Safari dan aplikasi lainnya, ketuk ikon "lebih banyak" di baris bawah menu.</value>
<value>Untuk mengaktifkan Bitwarden di Safari dan aplikasi lainnya, ketuk ikon "lebih banyak" di baris bawah menu.</value>
</data>
<data name="Favorite" xml:space="preserve">
<value>Favorit</value>
@@ -591,7 +591,7 @@
<value>Setelan Lainnya</value>
</data>
<data name="MustLogInMainApp" xml:space="preserve">
<value>Anda harus masuk ke aplikasi utama bitwarden sebelum Anda dapat menggunakan ekstensi.</value>
<value>Anda harus masuk ke aplikasi utama Bitwarden sebelum Anda dapat menggunakan ekstensi.</value>
</data>
<data name="Never" xml:space="preserve">
<value>Jangan pernah</value>
@@ -616,7 +616,7 @@
<comment>Confirmation, like "Ok, I understand it"</comment>
</data>
<data name="OptionDefaults" xml:space="preserve">
<value>Pilihan baku diatur dari alat pembuat sandi utama aplikasi bitwarden.</value>
<value>Pilihan baku diatur dari alat pembuat sandi utama aplikasi Bitwarden.</value>
</data>
<data name="Options" xml:space="preserve">
<value>Pilihan</value>
@@ -640,7 +640,7 @@
<value>Anda yakin ingin menimpa sandi saat ini?</value>
</data>
<data name="PushNotificationAlert" xml:space="preserve">
<value>bitwarden membuat brankas Anda disinkronkan secara otomatis dengan menggunakan notifikasi. Untuk pengalaman yang sebaik mungkin, silakan pilih "Oke" pada saran berikut ketika diminta untuk mengaktifkan notifikasi.</value>
<value>Bitwarden membuat brankas Anda disinkronkan secara otomatis dengan menggunakan notifikasi. Untuk pengalaman yang sebaik mungkin, silakan pilih "Oke" pada saran berikut ketika diminta untuk mengaktifkan notifikasi.</value>
<comment>Push notifications for apple products</comment>
</data>
<data name="RateTheApp" xml:space="preserve">
@@ -650,7 +650,7 @@
<value>Mohon pertimbangkan membantu kami dengan ulasan yang baik!</value>
</data>
<data name="RateTheAppDescriptionAppStore" xml:space="preserve">
<value>Peringkat App Store diatur ulang dengan setiap versi baru dari bitwarden. Mohon pertimbangkan membatu kami dengan ulasan yang baik!</value>
<value>Peringkat App Store diatur ulang dengan setiap versi baru dari Bitwarden. Mohon pertimbangkan membatu kami dengan ulasan yang baik!</value>
</data>
<data name="RegeneratePassword" xml:space="preserve">
<value>Buat Ulang Sandi</value>
@@ -726,7 +726,7 @@
<value>Lihat Item</value>
</data>
<data name="WebVault" xml:space="preserve">
<value>Brankas Web bitwarden</value>
<value>Brankas Web Bitwarden</value>
</data>
<data name="WebVaultDescription" xml:space="preserve">
<value>Kelola info masuk Anda dari berbagai peramban web dengan brankas web bitwarden.</value>
@@ -886,8 +886,8 @@
<value>Hold your YubiKey NEO against the back of the device to continue.</value>
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>Kunci Keamanan YubiKey NEO</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<value>Kunci Keamanan YubiKey</value>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Tambah Lampiran Baru</value>
@@ -992,10 +992,10 @@
<value>Custom Environment</value>
</data>
<data name="CustomEnvironmentFooter" xml:space="preserve">
<value>For advanced users. You can specify the base URL of each service independently.</value>
<value>Untuk pengguna tingkat lanjutan. Anda dapat menentukan secara mandiri basis dari URL untuk setiap layanan.</value>
</data>
<data name="EnvironmentSaved" xml:space="preserve">
<value>The environment URLs have been saved.</value>
<value>Lingkungan dari URL sudah tersimpan.</value>
</data>
<data name="FormattedIncorrectly" xml:space="preserve">
<value>{0} tidak diformat dengan benar.</value>
@@ -1036,7 +1036,7 @@
<value>Kode Keamanan</value>
</data>
<data name="SelectTypeAdd" xml:space="preserve">
<value>What type of item do you want to add?</value>
<value>Jenis apa yang ingin Anda tambahkan?</value>
</data>
<data name="TypeCard" xml:space="preserve">
<value>Kartu</value>
@@ -1048,7 +1048,7 @@
<value>Info Masuk</value>
</data>
<data name="TypeSecureNote" xml:space="preserve">
<value>Secure Note</value>
<value>Catatan Aman</value>
</data>
<data name="Address1" xml:space="preserve">
<value>Alamat 1</value>
@@ -1153,7 +1153,7 @@
<value>Negara Bagian / Provinsi</value>
</data>
<data name="Title" xml:space="preserve">
<value>Title</value>
<value>Panggilan</value>
</data>
<data name="ZipPostalCode" xml:space="preserve">
<value>Kode Pos</value>
@@ -1162,7 +1162,7 @@
<value>Alamat</value>
</data>
<data name="Expiration" xml:space="preserve">
<value>Expiration</value>
<value>Masa Berlaku</value>
</data>
<data name="DisableWebsiteIcons" xml:space="preserve">
<value>Nonaktifkan Ikon Situs Web</value>
@@ -1174,7 +1174,7 @@
<value>URL Server Ikon</value>
</data>
<data name="AutofillWithBitwarden" xml:space="preserve">
<value>Isi otomatis dengan bitwarden</value>
<value>Isi otomatis dengan Bitwarden</value>
</data>
<data name="VaultIsLocked" xml:space="preserve">
<value>Brankas terkunci</value>
@@ -1208,79 +1208,109 @@
<comment>What Apple calls their facial recognition reader.</comment>
</data>
<data name="FaceIDDirection" xml:space="preserve">
<value>Use Face ID to verify.</value>
<value>Gunakan Face ID untuk memverifikasi.</value>
</data>
<data name="UseFaceIDToUnlock" xml:space="preserve">
<value>Use Face ID To Unlock</value>
<value>Gunakan Face ID untuk membuka</value>
</data>
<data name="VerifyFaceID" xml:space="preserve">
<value>Verify Face ID</value>
<value>Verifikasi Face ID</value>
</data>
<data name="UseWindowsHelloToUnlock" xml:space="preserve">
<value>Unlock with Windows Hello</value>
<value>Buka dengan Windows Hello</value>
</data>
<data name="VerifyWindowsHello" xml:space="preserve">
<value>Verify with Windows Hello</value>
<value>Verifikasi dengan Windows Hello</value>
</data>
<data name="WindowsHello" xml:space="preserve">
<value>Windows Hello</value>
</data>
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
<value>We were unable to automatically open the Android autofill settings menu for you. You can navigate to the autofill settings menu manually from Android Settings &gt; System &gt; Languages and input &gt; Advanced &gt; Autofill service.</value>
<value>Kami tidak dapat secara otomatis membuka menu pengaturan Android isi otomatis untuk Anda. Anda dapat membuka menu pengaturan isi otomatis secara manual dari Pengaturan Android &gt; Sistem &gt; Bahasa dan masukan &gt; Lanjutan &gt; Layanan isi otomatis.</value>
</data>
<data name="CustomFieldName" xml:space="preserve">
<value>Custom Field Name</value>
<value>Nama Kolom Pilihan</value>
</data>
<data name="FieldTypeBoolean" xml:space="preserve">
<value>Boolean</value>
</data>
<data name="FieldTypeHidden" xml:space="preserve">
<value>Hidden</value>
<value>Tersembunyi</value>
</data>
<data name="FieldTypeText" xml:space="preserve">
<value>Text</value>
<value>Teks</value>
</data>
<data name="NewCustomField" xml:space="preserve">
<value>New Custom Field</value>
<value>Kolom Ubahsuai Baru</value>
</data>
<data name="SelectTypeField" xml:space="preserve">
<value>What type of custom field do you want to add?</value>
<value>Jenis kolom ubahsuai apa yang ingin Anda tambahkan?</value>
</data>
<data name="Remove" xml:space="preserve">
<value>Remove</value>
<value>Hapus</value>
</data>
<data name="NewUri" xml:space="preserve">
<value>New URI</value>
<value>URl Baru</value>
</data>
<data name="URIPosition" xml:space="preserve">
<value>URI {0}</value>
<comment>Label for a uri/url with position. i.e. URI 1, URI 2, etc</comment>
</data>
<data name="BaseDomain" xml:space="preserve">
<value>Base domain</value>
<value>Domain basis</value>
</data>
<data name="Default" xml:space="preserve">
<value>Default</value>
<value>Bawaan</value>
</data>
<data name="Exact" xml:space="preserve">
<value>Exact</value>
<value>Tepat</value>
</data>
<data name="Host" xml:space="preserve">
<value>Host</value>
<comment>A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'.</comment>
</data>
<data name="RegEx" xml:space="preserve">
<value>Regular expression</value>
<value>Ekspresi umum</value>
<comment>A programming term, also known as 'RegEx'.</comment>
</data>
<data name="StartsWith" xml:space="preserve">
<value>Starts with</value>
<value>Mulai dengan</value>
</data>
<data name="URIMatchDetection" xml:space="preserve">
<value>URI Match Detection</value>
<value>Deteksi kecocokan URI</value>
</data>
<data name="MatchDetection" xml:space="preserve">
<value>Match Detection</value>
<value>Deteksi kecocokan</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Hold your Yubikey near the top of the device.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>The accessibility service may be helpful to use when apps do not support the standard auto-fill service.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Password Updated</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Updated</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>Chiave di Sicurezza YubiKey</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Aggiungi Nuovo Allegato</value>
@@ -1075,7 +1075,7 @@
<value>Città / Comune</value>
</data>
<data name="Company" xml:space="preserve">
<value>Compagnia</value>
<value>Azienda</value>
</data>
<data name="Country" xml:space="preserve">
<value>Nazione</value>
@@ -1111,7 +1111,7 @@
<value>Cognome</value>
</data>
<data name="LicenseNumber" xml:space="preserve">
<value>Numero di licenza</value>
<value>Numero patente</value>
</data>
<data name="March" xml:space="preserve">
<value>Marzo</value>
@@ -1229,58 +1229,88 @@
<value>Non è stato possibile aprire il menu di impostazioni di auto-riempimento per te. Puoi navigare manualmente al menu delle impostazioni di auto-riempimento dalle Impostazioni Android &gt; Accessibilità &gt; Servizi &gt; Bitwarden.</value>
</data>
<data name="CustomFieldName" xml:space="preserve">
<value>Custom Field Name</value>
<value>Nome campo personalizzato</value>
</data>
<data name="FieldTypeBoolean" xml:space="preserve">
<value>Boolean</value>
<value>Booleano</value>
</data>
<data name="FieldTypeHidden" xml:space="preserve">
<value>Hidden</value>
<value>Nascosto</value>
</data>
<data name="FieldTypeText" xml:space="preserve">
<value>Text</value>
<value>Testo</value>
</data>
<data name="NewCustomField" xml:space="preserve">
<value>New Custom Field</value>
<value>Nuovo campo personalizzato</value>
</data>
<data name="SelectTypeField" xml:space="preserve">
<value>What type of custom field do you want to add?</value>
<value>Che tipo di campo personalizzato vuoi aggiungere?</value>
</data>
<data name="Remove" xml:space="preserve">
<value>Remove</value>
<value>Rimuovi</value>
</data>
<data name="NewUri" xml:space="preserve">
<value>New URI</value>
<value>Nuovo URI</value>
</data>
<data name="URIPosition" xml:space="preserve">
<value>URI {0}</value>
<comment>Label for a uri/url with position. i.e. URI 1, URI 2, etc</comment>
</data>
<data name="BaseDomain" xml:space="preserve">
<value>Base domain</value>
<value>Dominio di base</value>
</data>
<data name="Default" xml:space="preserve">
<value>Default</value>
<value>Predefinito</value>
</data>
<data name="Exact" xml:space="preserve">
<value>Exact</value>
<value>Esatto</value>
</data>
<data name="Host" xml:space="preserve">
<value>Host</value>
<comment>A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'.</comment>
</data>
<data name="RegEx" xml:space="preserve">
<value>Regular expression</value>
<value>Espressione regolare</value>
<comment>A programming term, also known as 'RegEx'.</comment>
</data>
<data name="StartsWith" xml:space="preserve">
<value>Starts with</value>
<value>Inizia con</value>
</data>
<data name="URIMatchDetection" xml:space="preserve">
<value>URI Match Detection</value>
<value>Rilevamento di corrispondenza URI</value>
</data>
<data name="MatchDetection" xml:space="preserve">
<value>Match Detection</value>
<value>Rilevamento di corrispondenza</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Hold your Yubikey near the top of the device.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>The accessibility service may be helpful to use when apps do not support the standard auto-fill service.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Password Updated</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Updated</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey セキュリティキー</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>添付ファイルを追加</value>
@@ -1283,4 +1283,34 @@
<value>一致検出方法</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>保存する</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>自動入力して保存</value>
</data>
<data name="Organization" xml:space="preserve">
<value>組織</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>YubiKey を端末の上部にしっかりタッチし続けてください。</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>もう一度実行</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>続行するには、YubiKey NEO を端末の背面にしっかりタッチし続けてください。</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>ユーザー補助サービスはアプリが標準の自動入力サービスに対応していない場合に適しています。</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>パスワード更新日</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>更新日</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey-sikkerhetsnøkkel</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Legg til et nytt vedlegg</value>
@@ -1126,10 +1126,10 @@
<value>Herr</value>
</data>
<data name="Mrs" xml:space="preserve">
<value>Frøken</value>
<value>Fru</value>
</data>
<data name="Ms" xml:space="preserve">
<value>Fru</value>
<value>Frøken</value>
</data>
<data name="November" xml:space="preserve">
<value>November</value>
@@ -1229,58 +1229,88 @@
<value>Vi klarte ikke å automatisk åpne Android sine auto-utfyllingsinnstilinger for deg. Du kan bla manuelt til auto-utfyllingsinnstillingsmenyen fra Android-innstillinger → System → Språk og inndata → Avansert → Auto-utfyllingstjeneste.</value>
</data>
<data name="CustomFieldName" xml:space="preserve">
<value>Custom Field Name</value>
<value>Navn på spesifikt felt</value>
</data>
<data name="FieldTypeBoolean" xml:space="preserve">
<value>Boolean</value>
<value>Boolsk verdi</value>
</data>
<data name="FieldTypeHidden" xml:space="preserve">
<value>Hidden</value>
<value>Skjult</value>
</data>
<data name="FieldTypeText" xml:space="preserve">
<value>Text</value>
<value>Tekst</value>
</data>
<data name="NewCustomField" xml:space="preserve">
<value>New Custom Field</value>
<value>Nytt spesifikt felt</value>
</data>
<data name="SelectTypeField" xml:space="preserve">
<value>What type of custom field do you want to add?</value>
<value>Hvilken type spesifikt felt vil du legge til?</value>
</data>
<data name="Remove" xml:space="preserve">
<value>Remove</value>
<value>Fjern</value>
</data>
<data name="NewUri" xml:space="preserve">
<value>New URI</value>
<value>Ny URI</value>
</data>
<data name="URIPosition" xml:space="preserve">
<value>URI {0}</value>
<comment>Label for a uri/url with position. i.e. URI 1, URI 2, etc</comment>
</data>
<data name="BaseDomain" xml:space="preserve">
<value>Base domain</value>
<value>Grunndomene</value>
</data>
<data name="Default" xml:space="preserve">
<value>Default</value>
<value>Standard</value>
</data>
<data name="Exact" xml:space="preserve">
<value>Exact</value>
<value>Nøyaktig</value>
</data>
<data name="Host" xml:space="preserve">
<value>Host</value>
<value>Vert</value>
<comment>A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'.</comment>
</data>
<data name="RegEx" xml:space="preserve">
<value>Regular expression</value>
<value>Regulært uttrykk</value>
<comment>A programming term, also known as 'RegEx'.</comment>
</data>
<data name="StartsWith" xml:space="preserve">
<value>Starts with</value>
<value>Starter med</value>
</data>
<data name="URIMatchDetection" xml:space="preserve">
<value>URI Match Detection</value>
<value>URI-matchgjenkjenning</value>
</data>
<data name="MatchDetection" xml:space="preserve">
<value>Match Detection</value>
<value>Match-gjenkjenning</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Ja, og lagre</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Autofyll og lagre</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organisasjon</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Hold din Yubikey nær toppen av enheten.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Prøv igjen</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>For å fortsette, hold din YubiKey NEO mot baksiden av enheten.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Tilgjengelighetstjenesten kan være nyttig å bruke når apper ikke støtter den vanlige autoutfyllingstjenesten.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Passordet ble oppdatert den</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Oppdatert den</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -403,7 +403,7 @@
<value>App-extensie</value>
</data>
<data name="AutofillAccessibilityDescription" xml:space="preserve">
<value>Gebruik de bitwarden-toegankelijkheidsdienst om uw inloggegevens automatisch in te laten vullen in de apps en op het internet.</value>
<value>Gebruik de Bitwarden-toegankelijkheidsdienst om uw inloggegevens automatisch in te laten vullen in de apps en op het internet.</value>
</data>
<data name="AutofillService" xml:space="preserve">
<value>Auto-invullen-dienst</value>
@@ -415,16 +415,16 @@
<value>Bitwarden app-extensie</value>
</data>
<data name="BitwardenAppExtensionAlert" xml:space="preserve">
<value>De eenvoudigste manier om nieuwe logins toe te voegen aan uw kluis is door de bitwarden app-extensie te gebruiken. Lees meer over het gebruik van de app-extensie op het "Hulpmiddelen"-scherm.</value>
<value>De eenvoudigste manier om nieuwe logins toe te voegen aan uw kluis is door de Bitwarden app-extensie te gebruiken. Lees meer over het gebruik van de app-extensie op het "Hulpmiddelen"-scherm.</value>
</data>
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
<value>Gebruik bitwarden in Safari en andere apps om uw inloggegevens automatisch in te vullen.</value>
<value>Gebruik Bitwarden in Safari en andere apps om uw inloggegevens automatisch in te vullen.</value>
</data>
<data name="BitwardenAutofillService" xml:space="preserve">
<value>bitwarden auto-invullen-dienst</value>
<value>Bitwarden auto-invullen-dienst</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription" xml:space="preserve">
<value>Gebruik de bitwarden-toegankelijkheidsdienst om uw inloggegevens automatisch in te laten vullen.</value>
<value>Gebruik de Bitwarden-toegankelijkheidsdienst om uw inloggegevens automatisch in te laten vullen.</value>
</data>
<data name="ChangeEmail" xml:space="preserve">
<value>E-mailadres wijzigen</value>
@@ -464,7 +464,7 @@
<comment>Message shown when interacting with the server</comment>
</data>
<data name="EditItem" xml:space="preserve">
<value>Item Bewerken</value>
<value>Item bewerken</value>
</data>
<data name="EnableAutomaticSyncing" xml:space="preserve">
<value>Automatische synchronisatie inschakelen</value>
@@ -501,10 +501,10 @@
<value>In Safari en Chrome vindt u Bitwarden onder het deel-pictogram (hint: scroll naar rechts op de onderste rij van het menu).</value>
</data>
<data name="ExtensionTapIcon" xml:space="preserve">
<value>Raak het bitwarden-pictogram in het menu aan om de extensie te starten.</value>
<value>Raak het Bitwarden-pictogram in het menu aan om de extensie te starten.</value>
</data>
<data name="ExtensionTurnOn" xml:space="preserve">
<value>Raak het "meer"-pictogram op de onderste rij van het menu aan om bitwarden in te schakelen in Safari en andere apps.</value>
<value>Raak het "meer"-pictogram op de onderste rij van het menu aan om Bitwarden in te schakelen in Safari en andere apps.</value>
</data>
<data name="Favorite" xml:space="preserve">
<value>Favoriet</value>
@@ -519,7 +519,7 @@
<value>Verkrijg hoofdwachtwoord-hint</value>
</data>
<data name="ImportItems" xml:space="preserve">
<value>Items Importeren</value>
<value>Items importeren</value>
</data>
<data name="ImportItemsConfirmation" xml:space="preserve">
<value>U kunt een bulk import van items doen vanuit de bitwarden.com webkluis. Wilt u de website nu bezoeken?</value>
@@ -591,7 +591,7 @@
<value>Meer instellingen</value>
</data>
<data name="MustLogInMainApp" xml:space="preserve">
<value>U moet inloggen op de bitwarden-app voordat u de extensie kunt gebruiken.</value>
<value>U moet inloggen op de Bitwarden-app voordat u de extensie kunt gebruiken.</value>
</data>
<data name="Never" xml:space="preserve">
<value>Nooit</value>
@@ -640,7 +640,7 @@
<value>Weet u zeker dat het huidige wachtwoord wilt overschrijven?</value>
</data>
<data name="PushNotificationAlert" xml:space="preserve">
<value>bitwarden houdt uw kluis automatisch gesynchroniseerd d.m.v. push-meldingen. Druk op "Oké" in het volgende dialoogvenster om push-meldingen in te schakelen.</value>
<value>Bitwarden houdt uw kluis automatisch gesynchroniseerd d.m.v. push-meldingen. Druk in het volgende dialoogvenster op "Oké" om push-meldingen in te schakelen.</value>
<comment>Push notifications for apple products</comment>
</data>
<data name="RateTheApp" xml:space="preserve">
@@ -650,7 +650,7 @@
<value>Help ons door een goede recensie te schrijven!</value>
</data>
<data name="RateTheAppDescriptionAppStore" xml:space="preserve">
<value>App Store-beoordelingen worden gereset bij elke nieuwe versie van bitwarden. Help ons door een goede beoordeling te schrijven!</value>
<value>App Store-beoordelingen worden gereset bij elke nieuwe versie van Bitwarden. Help ons door een goede beoordeling te schrijven!</value>
</data>
<data name="RegeneratePassword" xml:space="preserve">
<value>Wachtwoord opnieuw genereren</value>
@@ -723,13 +723,13 @@
<value>Verificatiecode</value>
</data>
<data name="ViewItem" xml:space="preserve">
<value>Item Bekijken</value>
<value>Item weergeven</value>
</data>
<data name="WebVault" xml:space="preserve">
<value>bitwarden-webkluis</value>
<value>Bitwarden-webkluis</value>
</data>
<data name="WebVaultDescription" xml:space="preserve">
<value>Beheer je items vanuit elke browser met de bitwarden webkluis.</value>
<value>Beheer uw items vanuit elke webbrowser met de Bitwarden-webkluis.</value>
</data>
<data name="Lost2FAApp" xml:space="preserve">
<value>Authenticatie-app kwijt?</value>
@@ -756,7 +756,7 @@
<comment>This is used for the autofill service. ex. "There are no items in your vault for twitter.com".</comment>
</data>
<data name="BitwardenAutofillServiceNotification" xml:space="preserve">
<value>Als u een bitwarden auto-invullen-melding ziet, dan kunt u deze aanraken om de auto-invullen-dienst te starten.</value>
<value>Als u een Bitwarden auto-invullen-melding ziet, dan kunt u deze aanraken om de auto-invullen-dienst te starten.</value>
</data>
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
<value>Raak deze melding aan om een login automatisch in te vullen d.m.v. uw kluis.</value>
@@ -765,7 +765,7 @@
<value>Toegankelijkheidsinstellingen openen</value>
</data>
<data name="BitwardenAutofillServiceStep1" xml:space="preserve">
<value>1. Raak op het Android-toegankelijkheidsinstellingen-scherm "bitwarden" aan onder de kop Diensten.</value>
<value>1. Raak op het Android-toegankelijkheidsinstellingen-scherm "Bitwarden" aan onder de kop Diensten.</value>
</data>
<data name="BitwardenAutofillServiceStep2" xml:space="preserve">
<value>2. Raak de schuifknop aan en druk op Oké om te accepteren.</value>
@@ -783,7 +783,7 @@
<value>Bèta</value>
</data>
<data name="BitwardenAutofillServiceAlert" xml:space="preserve">
<value>De eenvoudigste manier om nieuwe logins toe te voegen aan uw kluis is door de bitwarden app-extensie te gebruiken. Lees meer over het gebruik van de app-extensie op het "Hulpmiddelen"-scherm.</value>
<value>De eenvoudigste manier om nieuwe logins toe te voegen aan uw kluis is door de Bitwarden app-extensie te gebruiken. Lees meer over het gebruik van de app-extensie op het "Hulpmiddelen"-scherm.</value>
</data>
<data name="Autofill" xml:space="preserve">
<value>Auto-invullen</value>
@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey NEO-beveiligingssleute</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Nieuwe bijlage toevoegen</value>
@@ -986,7 +986,7 @@
<value>Meer informatie</value>
</data>
<data name="ApiUrl" xml:space="preserve">
<value>API Server URL</value>
<value>API server-URL</value>
</data>
<data name="CustomEnvironment" xml:space="preserve">
<value>Aangepaste omgeving</value>
@@ -1002,23 +1002,23 @@
<comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment>
</data>
<data name="IdentityUrl" xml:space="preserve">
<value>Gebruikersbeheer Server URL</value>
<value>Gebruikersbeheer server-URL</value>
<comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment>
</data>
<data name="SelfHostedEnvironment" xml:space="preserve">
<value>Zelf gehoste omgeving</value>
<value>Zelfgehoste omgeving</value>
</data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Specificeer de basis URL van je op locatie gehoste bitwarden installatie.</value>
<value>Specificeer de basis-URL van uw op locatie gehoste Bitwarden-installatie.</value>
</data>
<data name="ServerUrl" xml:space="preserve">
<value>Server URL</value>
<value>Server-URL</value>
</data>
<data name="WebVaultUrl" xml:space="preserve">
<value>Web Kluis Server URL</value>
<value>Webkluis server-URL</value>
</data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tap this notification to view logins from your vault.</value>
<value>Raak deze melding aan om logins te bekijken uit uw kluis.</value>
</data>
<data name="CustomFields" xml:space="preserve">
<value>Aangepaste velden</value>
@@ -1027,7 +1027,7 @@
<value>Nummer Kopiëren</value>
</data>
<data name="CopySecurityCode" xml:space="preserve">
<value>Kopieer Beveiligingscode</value>
<value>Beveiligingscode kopiëren</value>
</data>
<data name="Number" xml:space="preserve">
<value>Nummer</value>
@@ -1048,7 +1048,7 @@
<value>Login</value>
</data>
<data name="TypeSecureNote" xml:space="preserve">
<value>Veilige Notitie</value>
<value>Veilige notitie</value>
</data>
<data name="Address1" xml:space="preserve">
<value>Adres 1</value>
@@ -1069,10 +1069,10 @@
<value>Merk</value>
</data>
<data name="CardholderName" xml:space="preserve">
<value>Naam Kaarthouder</value>
<value>Naam van kaarthouder</value>
</data>
<data name="CityTown" xml:space="preserve">
<value>Stad</value>
<value>Stad / Dorp</value>
</data>
<data name="Company" xml:space="preserve">
<value>Bedrijf</value>
@@ -1129,7 +1129,7 @@
<value>mevr.</value>
</data>
<data name="Ms" xml:space="preserve">
<value>mevr.</value>
<value>Mej.</value>
</data>
<data name="November" xml:space="preserve">
<value>November</value>
@@ -1147,7 +1147,7 @@
<value>September</value>
</data>
<data name="SSN" xml:space="preserve">
<value>Burgerservicenummer (BSN)</value>
<value>Burgerservicenummer</value>
</data>
<data name="StateProvince" xml:space="preserve">
<value>Staat / Provincie</value>
@@ -1165,19 +1165,19 @@
<value>Vervaldatum</value>
</data>
<data name="DisableWebsiteIcons" xml:space="preserve">
<value>Schakel Website Icoontjes Uit</value>
<value>Websitepictogrammen uitschakelen</value>
</data>
<data name="DisableWebsiteIconsDescription" xml:space="preserve">
<value>Website Icons provides a recognizable icon next to each login item in your vault.</value>
<value>Websitepictogrammen bieden een herkenbare afbeelding naast elk item in uw kluis.</value>
</data>
<data name="IconsUrl" xml:space="preserve">
<value>Icoontjes-server URL</value>
<value>Pictogrammen server-URL</value>
</data>
<data name="AutofillWithBitwarden" xml:space="preserve">
<value>Automatisch invullen met bitwarden</value>
<value>Automatisch invullen met Bitwarden</value>
</data>
<data name="VaultIsLocked" xml:space="preserve">
<value>Kluis zit op slot</value>
<value>Kluis is vergrendeld</value>
</data>
<data name="GoToMyVault" xml:space="preserve">
<value>Ga naar mijn kluis</value>
@@ -1195,10 +1195,10 @@
<value>Automatisch invullen door Toegankelijkheidsservice</value>
</data>
<data name="AutofillServiceDescription" xml:space="preserve">
<value>De bitwarden automatische invulservice gebruikt Android Autofill Framework om u te helpen bij het invullen van inloggegevens, creditcards en identiteitsgegevens in andere apps op uw apparaat.</value>
<value>De Bitwarden automatische invulservice gebruikt Android Autofill Framework om u te helpen bij het invullen van inloggegevens, creditcards en identiteitsgegevens in andere apps op uw apparaat.</value>
</data>
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
<value>Gebruik de bitwarden-toegankelijkheidsdienst om uw inloggevens automatisch in te laten vullen.</value>
<value>Gebruik de Bitwarden-toegankelijkheidsdienst om uw inloggevens automatisch in te laten vullen.</value>
</data>
<data name="BitwardenAutofillServiceOpenAutofillSettings" xml:space="preserve">
<value>Open instellingen voor automatisch invullen</value>
@@ -1266,7 +1266,7 @@
<value>Exact</value>
</data>
<data name="Host" xml:space="preserve">
<value>Host</value>
<value>Hostnaam</value>
<comment>A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'.</comment>
</data>
<data name="RegEx" xml:space="preserve">
@@ -1283,4 +1283,34 @@
<value>Overeenkomstdetectie</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Ja, en opslaan</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Automatisch invullen en opslaan</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organisatie</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Houd uw Yubikey bij de bovenkant van het apparaat.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Probeer het opnieuw</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Houd uw YubiKey NEO bij de achterkant van het apparaat om door te gaan.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>De toegankelijkheidsdienst kan nuttig zijn wanneer apps het reguliere automatisch invullen niet ondersteunen.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Wachtwoord bijgewerkt</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Bijgewerkt</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>Klucz bezpieczeństwa YubiKey NEO</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Dodaj nowy załącznik</value>
@@ -1283,4 +1283,34 @@
<value>Wykrywanie dopasowania</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Tak i Zapisz</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Automatycznie wypełniaj i zapisuj</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organizacja</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Przytrzymaj swój Yubikey w okolicy górnej części urządzenia.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Spróbuj ponownie</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Aby kontynuować, przyłóż swój YubiKey NEO do tylnej części urządzenia.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Usługi ułatwień dostępu mogą być pomocne w sytuacji, gdy aplikacje nie obsługują standardowej usługi automatycznego uzupełniania.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Hasło zaktualizowane</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Zaktualizowano</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>Chave de Segurança YubiKey NEO</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Adicionar Novo Anexo</value>
@@ -1283,4 +1283,34 @@
<value>Detecção de Correspondência</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Sim, e Salvar</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Autopreencher e salvar</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organização</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Segure a sua Yubikey perto do topo do dispositivo.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Tentar novamente</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Para continuar, segure a sua YubiKey NEO contra a parte de trás do dispositivo.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>O serviço de acessibilidade pode ser útil para se usar quando os aplicativos não suportam o serviço de autopreenchimento padrão.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Senha Atualizada</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Atualizado</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -196,7 +196,7 @@
<value>Envie-nos um email diretamente para obter ajuda ou deixar feedback.</value>
</data>
<data name="EnterPIN" xml:space="preserve">
<value>Digite o seu código PIN.</value>
<value>Introduza o seu código PIN.</value>
</data>
<data name="Favorites" xml:space="preserve">
<value>Favoritos</value>
@@ -366,7 +366,7 @@
<value>Verificar impressão digital</value>
</data>
<data name="VerifyMasterPassword" xml:space="preserve">
<value>Verificar palavra-passe</value>
<value>Verificar palavra-passe mestra</value>
</data>
<data name="VerifyPIN" xml:space="preserve">
<value>Verifica PIN</value>
@@ -470,7 +470,7 @@
<value>Ativar sincronização automática</value>
</data>
<data name="EnterEmailForHint" xml:space="preserve">
<value>Digite o endereço de email da sua conta para receber a dica da sua palavra-passe mestra.</value>
<value>Introduza o endereço de email da sua conta para receber a dica da sua palavra-passe mestra.</value>
</data>
<data name="ExntesionReenable" xml:space="preserve">
<value>Reativar extensão da aplicação</value>
@@ -656,7 +656,7 @@
<value>Regenerar palavra-passe</value>
</data>
<data name="RetypeMasterPassword" xml:space="preserve">
<value>Re-digite a palavra-passe mestra</value>
<value>Reescreva a palavra-passe mestra</value>
</data>
<data name="SearchVault" xml:space="preserve">
<value>Pesquisar cofre</value>
@@ -674,7 +674,7 @@
<value>Definir PIN</value>
</data>
<data name="SetPINDirection" xml:space="preserve">
<value>Digite um código PIN de 4 dígitos para desbloquear a aplicação.</value>
<value>Introduza um código PIN de 4 dígitos para desbloquear a aplicação.</value>
</data>
<data name="ItemInformation" xml:space="preserve">
<value>Informação do item</value>
@@ -707,7 +707,7 @@
<value>Início de sessão de dois passos</value>
</data>
<data name="TwoStepLoginConfirmation" xml:space="preserve">
<value>O início de sessão de dois passos torna a sua conta mais segura ao requerer que digite um código de segurança de uma aplicação de autenticação quando iniciar sessão. O início de sessão de dois passos pode ser ativado no cofre web bitwarden.com. Pretende visitar o website agora?</value>
<value>O início de sessão de dois passos torna a sua conta mais segura ao requerer que verifique o seu início de sessão com outro dispositivo como uma chave de segurança, aplicação de autenticação, SMS, chamada telefónica, ou email. O início de sessão de dois passos pode ser ativado no cofre web bitwarden.com. Pretende visitar o website agora?</value>
</data>
<data name="UnlockWith" xml:space="preserve">
<value>Destrancar com {0}</value>
@@ -842,11 +842,11 @@
<comment>For 2FA</comment>
</data>
<data name="EnterVerificationCodeApp" xml:space="preserve">
<value>Digite o código de verificação de 6 dígitos da sua aplicação de autenticador {0}.</value>
<value>Introduza o código de verificação de 6 dígitos da sua aplicação de autenticador.</value>
<comment>For 2FA</comment>
</data>
<data name="EnterVerificationCodeEmail" xml:space="preserve">
<value>Digite o código de verificação de 6 dígitos que foi enviado por email para {0}.</value>
<value>Introduza o código de verificação de 6 dígitos que foi enviado por email para {0}.</value>
<comment>For 2FA</comment>
</data>
<data name="LoginUnavailable" xml:space="preserve">
@@ -883,11 +883,11 @@
<comment>For 2FA</comment>
</data>
<data name="YubiKeyInstruction" xml:space="preserve">
<value>Para continuar, segure a sua YubiKey NEO contra a parte de trás do seu dispositivo ou introduza a sua YubiKey na porta USB do seu dispositivo, depois toque no seu botão.</value>
<value>Para continuar, segure a sua YubiKey NEO contra a parte de trás do dispositivo ou introduza a sua YubiKey na porta USB do seu dispositivo, depois toque no seu botão.</value>
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>Chave de segurança YubiKey</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Adicionar novo anexo</value>
@@ -1283,4 +1283,34 @@
<value>Deteção de correspondência</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Sim, e guardar</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-preencher e guardar</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organização</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Segure a sua Yubikey perto do topo do dispositivo.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Tentar novamente</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Para continuar, segure a sua YubiKey NEO contra a parte de trás do dispositivo.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>O serviço de acessibilidade pode ser útil para utilizar quando as aplicações não suportam o serviço de auto-preenchimento padrão.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Palavra passe atualizada</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Atualizado</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey Security Key</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Add New Attachment</value>
@@ -1293,4 +1293,24 @@
<value>Organization</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Hold your Yubikey near the top of the device.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>The accessibility service may be helpful to use when apps do not support the standard auto-fill service.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Password Updated</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Updated</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>Cheie de securitate YubiKey NEO</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Adăugaţi un nou ataşament</value>
@@ -1229,58 +1229,88 @@
<value>Nu am reușit să deschidem automat meniul setărilor pentru completare automată. Puteți să navigați manual la meniul setărilor pentru completarea automată din Setările Android &gt; Sistem &gt; Limbi și introducerea textului &gt; Avansate &gt; Serviciu de completare automată.</value>
</data>
<data name="CustomFieldName" xml:space="preserve">
<value>Custom Field Name</value>
<value>Numele câmpului particularizat</value>
</data>
<data name="FieldTypeBoolean" xml:space="preserve">
<value>Boolean</value>
<value>Valoare logică</value>
</data>
<data name="FieldTypeHidden" xml:space="preserve">
<value>Hidden</value>
<value>Ascuns</value>
</data>
<data name="FieldTypeText" xml:space="preserve">
<value>Text</value>
</data>
<data name="NewCustomField" xml:space="preserve">
<value>New Custom Field</value>
<value>Câmp nou personalizat</value>
</data>
<data name="SelectTypeField" xml:space="preserve">
<value>What type of custom field do you want to add?</value>
<value>Ce tip de câmp personalizat doriți să adaugați?</value>
</data>
<data name="Remove" xml:space="preserve">
<value>Remove</value>
<value>Ștergeți</value>
</data>
<data name="NewUri" xml:space="preserve">
<value>New URI</value>
<value>URI nou</value>
</data>
<data name="URIPosition" xml:space="preserve">
<value>URI {0}</value>
<comment>Label for a uri/url with position. i.e. URI 1, URI 2, etc</comment>
</data>
<data name="BaseDomain" xml:space="preserve">
<value>Base domain</value>
<value>Domeniu de bază</value>
</data>
<data name="Default" xml:space="preserve">
<value>Default</value>
<value>Implicit</value>
</data>
<data name="Exact" xml:space="preserve">
<value>Exact</value>
</data>
<data name="Host" xml:space="preserve">
<value>Host</value>
<value>Gazdă</value>
<comment>A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'.</comment>
</data>
<data name="RegEx" xml:space="preserve">
<value>Regular expression</value>
<value>Expresie regulată</value>
<comment>A programming term, also known as 'RegEx'.</comment>
</data>
<data name="StartsWith" xml:space="preserve">
<value>Starts with</value>
<value>Începe cu</value>
</data>
<data name="URIMatchDetection" xml:space="preserve">
<value>URI Match Detection</value>
<value>Detectare potrivire URI</value>
</data>
<data name="MatchDetection" xml:space="preserve">
<value>Match Detection</value>
<value>Detectare potrivire</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Da și salvează</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Completează automat și salvează</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organizație</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Țineţi YubiKey-ul dumneavoastră în partea de sus a dispozitivului.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Încercaţi din nou</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Pentru a continua, ţineţi NEO-YubiKey-ul dumneavoastră către partea din spate a dispozitivului.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Serviciul de accesibilitate poate fi de ajutor atunci când unele aplicații nu acceptă serviciul standard de completare automată.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Password Updated</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Updated</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -464,7 +464,7 @@
<comment>Message shown when interacting with the server</comment>
</data>
<data name="EditItem" xml:space="preserve">
<value>Изменить элемент</value>
<value>Изменение элемента</value>
</data>
<data name="EnableAutomaticSyncing" xml:space="preserve">
<value>Включить автоматическую синхронизацию</value>
@@ -522,7 +522,7 @@
<value>Импорт элементов</value>
</data>
<data name="ImportItemsConfirmation" xml:space="preserve">
<value>Вы можете легко импортировать свои элементы из других менеджеров паролей в свое веб-хранилище bitwarden. Сделать это сейчас?</value>
<value>Вы можете импортировать свои элементы в свое веб-хранилище на bitwarden.com. Перейти на сайт сейчас?</value>
</data>
<data name="ImportItemsDescription" xml:space="preserve">
<value>Быстрый импорт ваших элементов из других менеджеров паролей.</value>
@@ -846,7 +846,7 @@
<comment>For 2FA</comment>
</data>
<data name="EnterVerificationCodeEmail" xml:space="preserve">
<value>Введите 6-значный код подтверждения, который был отправлен на email {0}.</value>
<value>Введите 6-значный код подтверждения, который был отправлен на {0}.</value>
<comment>For 2FA</comment>
</data>
<data name="LoginUnavailable" xml:space="preserve">
@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>Ключ безопасности YubiKey</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Добавить новое вложение</value>
@@ -1283,4 +1283,34 @@
<value>Обнаружение совпадений</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Да, и сохранить</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Заполнить и сохранить</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Организация</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Удерживайте Yubikey в верхней части устройства.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Еще раз</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Для продолжения, удерживайте YubiKey NEO у задней панели устройства.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Служба доступности может быть полезна, когда приложения не поддерживают стандартную службу автозаполнения.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Пароль обновлен</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Обновлено</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey NEO bezpečnostný kľúč</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Pridať novú prílohu</value>
@@ -1217,70 +1217,100 @@
<value>Overiť Face ID</value>
</data>
<data name="UseWindowsHelloToUnlock" xml:space="preserve">
<value>Unlock with Windows Hello</value>
<value>Odomknúť pomocou Windows Hello</value>
</data>
<data name="VerifyWindowsHello" xml:space="preserve">
<value>Verify with Windows Hello</value>
<value>Overiť pomocou Windows Hello</value>
</data>
<data name="WindowsHello" xml:space="preserve">
<value>Windows Hello</value>
</data>
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
<value>We were unable to automatically open the Android autofill settings menu for you. You can navigate to the autofill settings menu manually from Android Settings &gt; System &gt; Languages and input &gt; Advanced &gt; Autofill service.</value>
<value>Nepodarilo sa automaticky otvoriť nastavenia automatického dopĺňania pre systém Android. Môžete otvoriť nastavenie manuálne cez Nastavenia &gt; Systém &gt; Jazyky a vstup &gt; Rozšírené &gt; Služba automatického dopĺňania.</value>
</data>
<data name="CustomFieldName" xml:space="preserve">
<value>Custom Field Name</value>
<value>Názov vlastného poľa</value>
</data>
<data name="FieldTypeBoolean" xml:space="preserve">
<value>Boolean</value>
<value>Áno/Nie</value>
</data>
<data name="FieldTypeHidden" xml:space="preserve">
<value>Hidden</value>
<value>Skryté</value>
</data>
<data name="FieldTypeText" xml:space="preserve">
<value>Text</value>
</data>
<data name="NewCustomField" xml:space="preserve">
<value>New Custom Field</value>
<value>Nové vlastné pole</value>
</data>
<data name="SelectTypeField" xml:space="preserve">
<value>What type of custom field do you want to add?</value>
<value>Aký typ poľa chcete pridať?</value>
</data>
<data name="Remove" xml:space="preserve">
<value>Remove</value>
<value>Odstrániť</value>
</data>
<data name="NewUri" xml:space="preserve">
<value>New URI</value>
<value>Nové URI</value>
</data>
<data name="URIPosition" xml:space="preserve">
<value>URI {0}</value>
<comment>Label for a uri/url with position. i.e. URI 1, URI 2, etc</comment>
</data>
<data name="BaseDomain" xml:space="preserve">
<value>Base domain</value>
<value>Základná doména</value>
</data>
<data name="Default" xml:space="preserve">
<value>Default</value>
<value>Predvolené</value>
</data>
<data name="Exact" xml:space="preserve">
<value>Exact</value>
<value>Presný</value>
</data>
<data name="Host" xml:space="preserve">
<value>Host</value>
<value>Hostiteľ</value>
<comment>A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'.</comment>
</data>
<data name="RegEx" xml:space="preserve">
<value>Regular expression</value>
<value>Regulárny výraz</value>
<comment>A programming term, also known as 'RegEx'.</comment>
</data>
<data name="StartsWith" xml:space="preserve">
<value>Starts with</value>
<value>Začína na</value>
</data>
<data name="URIMatchDetection" xml:space="preserve">
<value>URI Match Detection</value>
<value>Spôsob mapovania URI</value>
</data>
<data name="MatchDetection" xml:space="preserve">
<value>Match Detection</value>
<value>Spôsob mapovania</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Áno, a uložiť</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-vyplniť a uložiť</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organizácia</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Držte vaše Yubikey blízko hornej časti prístroja.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Skúsiť Znovu</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Ak chcete pokračovať, podržte YubiKey NEO na zadnej strane prístroja.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Služba dostupnosti môže byť užitočné pre aplikácie, ktoré nepodporujú štandardnú službu automatického dopĺňania.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Heslo bolo aktualizované</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Aktualizované</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey säkerhetsnyckel</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Bifoga fil</value>
@@ -1283,4 +1283,34 @@
<value>Matchning</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Ja, och spara</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Fyll i automatiskt och spara</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organisation</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Håll din Yubikey nära ovansidan av enheten.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Försök igen</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>För att fortsätta, håll din YubiKey NEO mot baksidan av enheten.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Tillgänglighetstjänsten kan vara användbar när appar inte stöder standardvarianten av ifyllnad.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Lösenord uppdaterat</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Uppdaterad</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -412,7 +412,7 @@
<value>หลีกเลี่ยงอักขระที่ไม่ชัดเจน</value>
</data>
<data name="BitwardenAppExtension" xml:space="preserve">
<value>bitwarden App Extension</value>
<value>ส่วนขยายแอปพลิเคชัน bitwarden</value>
</data>
<data name="BitwardenAppExtensionAlert" xml:space="preserve">
<value>The easiest way to add new logins to your vault is from the bitwarden App Extension. Learn more about using the bitwarden App Extension by navigating to the "Tools" screen.</value>
@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey NEO Security Key</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>เพิ่มไฟล์แนบใหม่</value>
@@ -1232,7 +1232,7 @@
<value>ชื่อเขตข้อมูล ที่กำหนดเอง</value>
</data>
<data name="FieldTypeBoolean" xml:space="preserve">
<value>Boolean</value>
<value>ค่าบูลีน</value>
</data>
<data name="FieldTypeHidden" xml:space="preserve">
<value>ซ่อน</value>
@@ -1244,10 +1244,10 @@
<value>สร้างเขตข้อมูลที่กำหนดเองใหม่</value>
</data>
<data name="SelectTypeField" xml:space="preserve">
<value>What type of custom field do you want to add?</value>
<value>คุณต้องการเพิ่มเขตข้อมูลแบบกำหนดเองชนิดใด</value>
</data>
<data name="Remove" xml:space="preserve">
<value>Remove</value>
<value>เอาออก</value>
</data>
<data name="NewUri" xml:space="preserve">
<value>URI ใหม่</value>
@@ -1263,24 +1263,54 @@
<value>ค่าเริ่มต้น</value>
</data>
<data name="Exact" xml:space="preserve">
<value>Exact</value>
<value>ถูกต้อง</value>
</data>
<data name="Host" xml:space="preserve">
<value>Host</value>
<value>โฮสต์</value>
<comment>A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'.</comment>
</data>
<data name="RegEx" xml:space="preserve">
<value>Regular expression</value>
<value>นิพจน์ทั่วไป</value>
<comment>A programming term, also known as 'RegEx'.</comment>
</data>
<data name="StartsWith" xml:space="preserve">
<value>Starts with</value>
<value>เริ่มต้นด้วย</value>
</data>
<data name="URIMatchDetection" xml:space="preserve">
<value>URI Match Detection</value>
<value>ตรวจพบการจับคู่ URL</value>
</data>
<data name="MatchDetection" xml:space="preserve">
<value>Match Detection</value>
<value>ตรวจพบการจับคู่</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Hold your Yubikey near the top of the device.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>The accessibility service may be helpful to use when apps do not support the standard auto-fill service.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Password Updated</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Updated</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey NEO Güvenlik Anahtarı</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Yeni bir ek ekle</value>
@@ -1250,10 +1250,10 @@
<value>Kaldır</value>
</data>
<data name="NewUri" xml:space="preserve">
<value>New URI</value>
<value>Yeni URL</value>
</data>
<data name="URIPosition" xml:space="preserve">
<value>URI {0}</value>
<value>URL {0}</value>
<comment>Label for a uri/url with position. i.e. URI 1, URI 2, etc</comment>
</data>
<data name="BaseDomain" xml:space="preserve">
@@ -1277,10 +1277,40 @@
<value>İle başlar</value>
</data>
<data name="URIMatchDetection" xml:space="preserve">
<value>URI Match Detection</value>
<value>Eşleşen URL Tespiti</value>
</data>
<data name="MatchDetection" xml:space="preserve">
<value>Match Detection</value>
<value>Eşleşme Tespiti</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Hold your Yubikey near the top of the device.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>The accessibility service may be helpful to use when apps do not support the standard auto-fill service.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Password Updated</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Updated</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -172,7 +172,7 @@
<comment>Message shown when interacting with the server</comment>
</data>
<data name="DoYouReallyWantToDelete" xml:space="preserve">
<value>Ви справді хочете видалити? Цю дію неможливо відмінити.</value>
<value>Ви справді хочете видалити? Цю дію неможливо скасувати.</value>
<comment>Confirmation alert message when deleteing something.</comment>
</data>
<data name="Edit" xml:space="preserve">
@@ -704,10 +704,10 @@
<comment>What Apple calls their fingerprint reader.</comment>
</data>
<data name="TwoStepLogin" xml:space="preserve">
<value>Двоетапна авторизація</value>
<value>Двохетапна авторизація</value>
</data>
<data name="TwoStepLoginConfirmation" xml:space="preserve">
<value>Двоетапна авторизація робить ваш обліковий запис більш захищеним, вимагаючи підтвердження входу за допомогою іншого пристрою, наприклад, коду безпеки, програми авторизації, SMS, телефонного виклику, або е-пошти. Ви можете увімкнути двоетапну авторизацію в сховищі на bitwarden.com. Хочете перейти на веб-сайт зараз?</value>
<value>Двохетапна авторизація робить ваш обліковий запис більш захищеним, вимагаючи підтвердження вашого входу з використанням іншого пристрою, наприклад, за допомогою коду безпеки, програми авторизації, SMS, телефонного виклику, або е-пошти. Ви можете увімкнути двохетапну авторизацію в сховищі на bitwarden.com. Хочете перейти на веб-сайт зараз?</value>
</data>
<data name="UnlockWith" xml:space="preserve">
<value>Розблокування з {0}</value>
@@ -854,7 +854,7 @@
<comment>For 2FA whenever there are no available providers on this device.</comment>
</data>
<data name="NoTwoStepAvailable" xml:space="preserve">
<value>Цей обліковий запис має увімкнену двоетапну авторизацію, однак, жоден з підтримуваних провайдерів подвійної авторизації для цього пристрою не підтримується. Будь ласка, скористайтеся підтримуваним пристроєм та/або додайте інших провайдерів, які мають кращу підтримку різних пристроїв (наприклад, програму авторизації).</value>
<value>Цей обліковий запис має увімкнену двохетапну авторизацію, однак, жоден з підтримуваних провайдерів для цього пристрою не підтримується. Будь ласка, скористайтеся підтримуваним пристроєм та/або додайте інших провайдерів, які мають кращу підтримку різних пристроїв (наприклад, програму авторизації).</value>
</data>
<data name="RecoveryCodeTitle" xml:space="preserve">
<value>Код відновлення</value>
@@ -869,10 +869,10 @@
<comment>For 2FA</comment>
</data>
<data name="TwoStepLoginOptions" xml:space="preserve">
<value>Налаштування двоетапної авторизації</value>
<value>Налаштування двохетапної авторизації</value>
</data>
<data name="UseAnotherTwoStepMethod" xml:space="preserve">
<value>Використати інший спосіб двоетапної авторизації</value>
<value>Використати інший спосіб двохетапної авторизації</value>
</data>
<data name="VerificationEmailNotSent" xml:space="preserve">
<value>Не вдається надіслати лист для перевірки. Спробуйте знову.</value>
@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>Ключ безпеки YubiKey</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Додати нове вкладення</value>
@@ -1283,4 +1283,34 @@
<value>Виявлення збігів</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Так, і зберегти</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Заповнити і зберегти</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Організація</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Утримуйте Yubikey біля верхньої частини пристрою.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Спробуйте ще раз</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Щоб продовжити, утримуйте YubiKey NEO навпроти задньої частини пристрою.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Сервіс доступності може бути корисним для використання, коли програми не підтримують стандартний сервіс автозаповнення.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Пароль оновлено</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Оновлено</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -140,7 +140,7 @@
<comment>Navigate back to the previous screen.</comment>
</data>
<data name="Bitwarden" xml:space="preserve">
<value>bitwarden</value>
<value>Bitwarden</value>
<comment>App name. Shouldn't ever change.</comment>
</data>
<data name="Cancel" xml:space="preserve">
@@ -152,11 +152,11 @@
<comment>Copy some value to your clipboard.</comment>
</data>
<data name="CopyPassword" xml:space="preserve">
<value>Sao chép Mật khẩu</value>
<value>Sao chép mật khẩu</value>
<comment>The button text that allows a user to copy the login's password to their clipboard.</comment>
</data>
<data name="CopyUsername" xml:space="preserve">
<value>Sao chép Tên đăng nhập</value>
<value>Sao chép tên đăng nhập</value>
<comment>The button text that allows a user to copy the login's username to their clipboard.</comment>
</data>
<data name="Credits" xml:space="preserve">
@@ -186,7 +186,7 @@
<comment>Short label for an email address.</comment>
</data>
<data name="EmailAddress" xml:space="preserve">
<value>Địa chỉ Email</value>
<value>Địa chỉ email</value>
<comment>Full label for a email address.</comment>
</data>
<data name="EmailUs" xml:space="preserve">
@@ -247,7 +247,7 @@
<comment>Description message for the alert when internet connection is required to continue.</comment>
</data>
<data name="InternetConnectionRequiredTitle" xml:space="preserve">
<value>Yêu cầu Kết nối Internet</value>
<value>Yêu cầu kết nối Internet</value>
<comment>Title for the alert when internet connection is required to continue.</comment>
</data>
<data name="InvalidMasterPassword" xml:space="preserve">
@@ -276,7 +276,7 @@
<value>Bạn có chắc chắn muốn đăng xuất không?</value>
</data>
<data name="MasterPassword" xml:space="preserve">
<value>Mật khẩu chính</value>
<value>Mật khẩu</value>
<comment>Label for a master password.</comment>
</data>
<data name="More" xml:space="preserve">
@@ -288,7 +288,7 @@
<comment>The title for the vault page.</comment>
</data>
<data name="Name" xml:space="preserve">
<value>Tên</value>
<value>Tên mục</value>
<comment>Label for an entity name.</comment>
</data>
<data name="No" xml:space="preserve">
@@ -299,7 +299,7 @@
<comment>Label for notes.</comment>
</data>
<data name="Ok" xml:space="preserve">
<value>Được</value>
<value>Ok</value>
<comment>Acknowledgement.</comment>
</data>
<data name="DisableGA" xml:space="preserve">
@@ -366,7 +366,7 @@
<value>Xác thực vân tay</value>
</data>
<data name="VerifyMasterPassword" xml:space="preserve">
<value>Nhập lại mật khẩu chính</value>
<value>Nhập lại mật khẩu</value>
</data>
<data name="VerifyPIN" xml:space="preserve">
<value>Xác thực mã PIN</value>
@@ -381,7 +381,7 @@
<value>Ghé thăm trang web của chúng tôi</value>
</data>
<data name="VisitOurWebsiteDescription" xml:space="preserve">
<value>Truy cập trang web của chúng tôi để nhận trợ giúp, tin tức, địa chỉ mail liên lạc và/hoặc tìm hiểu thêm về cách sử dụng bitwarden.</value>
<value>Truy cập trang web của chúng tôi để nhận trợ giúp, tin tức, địa chỉ email liên lạc và tìm hiểu thêm về cách sử dụng Bitwarden.</value>
</data>
<data name="Website" xml:space="preserve">
<value>Trang web</value>
@@ -403,40 +403,40 @@
<value>Phần mở rộng ứng dụng</value>
</data>
<data name="AutofillAccessibilityDescription" xml:space="preserve">
<value>Sử dụng quyền truy cập sử dụng để bitwarden tự động điền thông tin đăng nhập của bạn trên các ứng dụng và web.</value>
<value>Cấp quyền truy cập sử dụng để Bitwarden tự động điền thông tin đăng nhập của bạn vào các ứng dụng và trang web.</value>
</data>
<data name="AutofillService" xml:space="preserve">
<value>Dịch vụ tự động điền</value>
<value>Tự động điền tiêu chuẩn</value>
</data>
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
<value>Tránh các ký tự không rõ ràng</value>
</data>
<data name="BitwardenAppExtension" xml:space="preserve">
<value>Tiện ích mở rộng ứng dụng bitwarden</value>
<value>Phần mở rộng Bitwarden</value>
</data>
<data name="BitwardenAppExtensionAlert" xml:space="preserve">
<value>Cách dễ nhất để thêm đăng nhập mới vào hầm của bạn là từ Tiện ích mở rộng ứng dụng bitwarden. Tìm hiểu thêm về cách sử dụng Tiện ích mở rộng ứng dụng bitwarden bằng cách điều hướng đến màn hình 'Công cụ'.</value>
<value>Cách dễ nhất để thêm đăng nhập mới vào kho của bạn là từ Phần mở rộng Bitwarden. Tìm hiểu thêm về cách sử dụng Phần mở rộng Bitwarden bằng cách điều hướng đến màn hình "Công cụ".</value>
</data>
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
<value>Sử dụng bitwarden trong Safari và các ứng dụng khác để tự động điền thông tin đăng nhập của bạn.</value>
<value>Sử dụng Bitwarden trong Safari và các ứng dụng khác để tự động điền thông tin đăng nhập của bạn.</value>
</data>
<data name="BitwardenAutofillService" xml:space="preserve">
<value>Dịch vụ Tự động điền bitwarden</value>
<value>Dịch vụ tự động điền Bitwarden</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription" xml:space="preserve">
<value>Sử dụng quyền truy cập sử dụng để bitwarden tự động điền thông tin đăng nhập của bạn.</value>
<value>Cấp quyền truy cập sử dụng để Bitwarden tự động điền thông tin đăng nhập giúp bạn.</value>
</data>
<data name="ChangeEmail" xml:space="preserve">
<value>Thay đổi Email</value>
<value>Thay đổi email</value>
</data>
<data name="ChangeEmailConfirmation" xml:space="preserve">
<value>Bạn có thể thay đổi địa chỉ email trong kho bitwarden nền web. Bạn có muốn truy cập trang web bây giờ?</value>
<value>Bạn có thể thay đổi địa chỉ email trong trang web Bitwarden. Bạn có muốn truy cập bitwarden.com bây giờ?</value>
</data>
<data name="ChangeMasterPassword" xml:space="preserve">
<value>Thay đổi mật khẩu chính</value>
<value>Thay đổi mật khẩu</value>
</data>
<data name="ChangePasswordConfirmation" xml:space="preserve">
<value>Bạn có thể thay đổi mật khẩu chính trong kho bitwarden nền web. Bạn có muốn truy cập trang web bây giờ?</value>
<value>Bạn có thể thay đổi mật khẩu ch trong trang web Bitwarden. Bạn có muốn truy cập bitwarden.com bây giờ?</value>
</data>
<data name="Close" xml:space="preserve">
<value>Đóng</value>
@@ -470,7 +470,7 @@
<value>Bật tự động đồng bộ</value>
</data>
<data name="EnterEmailForHint" xml:space="preserve">
<value>Nhập địa chỉ email tài khoản của bạn để nhận gợi ý mật khẩu chính.</value>
<value>Nhập địa chỉ email tài khoản của bạn để nhận gợi ý mật khẩu.</value>
</data>
<data name="ExntesionReenable" xml:space="preserve">
<value>Bật lại phần mở rộng ứng dụng</value>
@@ -482,7 +482,7 @@
<value>Bật phần mở rộng ứng dụng</value>
</data>
<data name="ExtensionInSafari" xml:space="preserve">
<value>Trong Safari, tìm bitwarden bằng cách sử dụng biểu tượng chia sẻ (gợi ý: di chuyển sang phải ở cuối cùng của trình đơn).</value>
<value>Trong Safari, tìm Bitwarden bằng cách sử dụng biểu tượng chia sẻ (gợi ý: di chuyển sang phải ở cuối cùng của trình đơn).</value>
<comment>Safari is the name of apple's web browser</comment>
</data>
<data name="ExtensionInstantAccess" xml:space="preserve">
@@ -498,13 +498,13 @@
<value>Thông tin đăng nhập của bạn giờ đây có thể dễ dàng truy cập từ Safari, Chrome và các ứng dụng được hỗ trợ khác.</value>
</data>
<data name="ExtensionSetup2" xml:space="preserve">
<value>Trong Safari và Chrome, tìm bitwarden bằng cách sử dụng biểu tượng chia sẻ (gợi ý: di chuyển sang phải ở cuối cùng của trình đơn chia sẻ).</value>
<value>Trong Safari và Chrome, tìm Bitwarden bằng cách sử dụng biểu tượng chia sẻ (gợi ý: di chuyển sang phải ở cuối cùng của trình đơn chia sẻ).</value>
</data>
<data name="ExtensionTapIcon" xml:space="preserve">
<value>Chạm vào biểu tượng bitwarden trong trình đơn để khởi chạy phần mở rộng.</value>
<value>Chạm vào biểu tượng Bitwarden trong trình đơn để khởi chạy phần mở rộng.</value>
</data>
<data name="ExtensionTurnOn" xml:space="preserve">
<value>Để bật bitwarden trong Safari và các ứng dụng khác, nhấn vào biểu tượng "thêm" ở hàng dưới cùng của trình đơn.</value>
<value>Để bật Bitwarden trong Safari và các ứng dụng khác, nhấn vào biểu tượng "thêm" ở hàng dưới cùng của trình đơn.</value>
</data>
<data name="Favorite" xml:space="preserve">
<value>Yêu thích</value>
@@ -516,16 +516,16 @@
<value>Tạo mật khẩu</value>
</data>
<data name="GetPasswordHint" xml:space="preserve">
<value>Nhận gợi ý mật khẩu chính của bạn</value>
<value>Nhận gợi ý mật khẩu Bitwarden</value>
</data>
<data name="ImportItems" xml:space="preserve">
<value>Nhập mục</value>
</data>
<data name="ImportItemsConfirmation" xml:space="preserve">
<value>Bạn có thể nhập các trường đăng nhập hàng loạt trên kho bitwarden nền web. Bạn có muốn truy cập trang web bây giờ?</value>
<value>Bạn có thể nhập mật khẩu hàng loạt trên trang chủ Bitwarden. Bạn có muốn truy cập bitwarden.com bây giờ?</value>
</data>
<data name="ImportItemsDescription" xml:space="preserve">
<value>Dễ dàng nhập toàn bộ mục đăng nhập của bạn từ các ứng dụng quản lý mật khẩu khác.</value>
<value>Dễ dàng nhập toàn bộ mật khẩu của bạn từ các ứng dụng quản lý mật khẩu khác.</value>
</data>
<data name="LastSync" xml:space="preserve">
<value>Lần đồng bộ gần nhất:</value>
@@ -552,7 +552,7 @@
<value>Tức thì</value>
</data>
<data name="LockOptions" xml:space="preserve">
<value>Tùy chọn Khóa</value>
<value>Khóa lại sau</value>
</data>
<data name="LoggingIn" xml:space="preserve">
<value>Đang đăng nhập...</value>
@@ -568,19 +568,19 @@
<value>Mật khẩu xác nhận không trùng khớp.</value>
</data>
<data name="MasterPasswordDescription" xml:space="preserve">
<value>Mật khẩu chính là mật khẩu bạn sử dụng để truy cập kho mật khẩu của bạn. Nó rất quan trọng nên bạn không được quên mật khẩu chính của mình. Không có cách nào để khôi phục lại mật khẩu chính nếu bạn quên nó.</value>
<value>Mật khẩu ch là mật khẩu bạn sử dụng để truy cập kho mật khẩu của bạn. Nó rất quan trọng nên bạn không được quên mật khẩu ch của mình. Không thể khôi phục lại mật khẩu ch nếu bạn quên nó.</value>
</data>
<data name="MasterPasswordHint" xml:space="preserve">
<value>Gợi ý mật khẩu chính (tùy chọn)</value>
<value>Gợi ý mật khẩu ch (tùy chọn)</value>
</data>
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Một gợi ý mật khẩu có thể giúp bạn nhớ lại mật khẩu chính của bạn nếu bạn quên nó.</value>
<value>Một gợi ý mật khẩu có thể giúp bạn nhớ lại mật khẩu ch của bạn nếu bạn quên nó.</value>
</data>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Mật khẩu chính phải có ít nhất 8 kí tự.</value>
<value>Mật khẩu ch phải có ít nhất 8 kí tự.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Số kí tự tối thiểu</value>
<value>Số chữ số tối thiểu</value>
<comment>Minimum numeric characters for password generator settings</comment>
</data>
<data name="MinSpecial" xml:space="preserve">
@@ -591,7 +591,7 @@
<value>Cài đặt Khác</value>
</data>
<data name="MustLogInMainApp" xml:space="preserve">
<value>Bạn phải đăng nhập vào ứng dụng bitwarden trước khi sử dụng tiện ích mở rộng.</value>
<value>Bạn phải đăng nhập vào ứng dụng Bitwarden trước khi sử dụng phần mở rộng.</value>
</data>
<data name="Never" xml:space="preserve">
<value>Không bao giờ</value>
@@ -616,7 +616,7 @@
<comment>Confirmation, like "Ok, I understand it"</comment>
</data>
<data name="OptionDefaults" xml:space="preserve">
<value>Các tùy chọn mặc định được thiết lập từ công cụ tạo mật khẩu của ứng dụng bitwarden.</value>
<value>Các tùy chọn mặc định được thiết lập trong trình tạo mật khẩu của ứng dụng Bitwarden.</value>
</data>
<data name="Options" xml:space="preserve">
<value>Tùy chọn</value>
@@ -634,13 +634,13 @@
<value>Gợi ý mật khẩu</value>
</data>
<data name="PasswordHintAlert" xml:space="preserve">
<value>Chúng tôi đã gửi cho bạn email có chứa gợi ý mật khẩu chính của bạn.</value>
<value>Chúng tôi đã gửi cho bạn email có chứa gợi ý mật khẩu ch của bạn.</value>
</data>
<data name="PasswordOverrideAlert" xml:space="preserve">
<value>Bạn có chắc chắn muốn ghi đè mật khẩu hiện tại không?</value>
</data>
<data name="PushNotificationAlert" xml:space="preserve">
<value>bitwarden giữ kho mật khẩu của bạn được đồng bộ tự động hóa bằng cách sử dụng thông báo đẩy. Để mang lại trải nghiệm tốt nhất, vui lòng chọn "Đồng ý" trên bảng thông báo sau khi được yêu cầu bật thông báo đẩy.</value>
<value>Bitwarden giữ kho mật khẩu của bạn luôn được đồng bộ tự động hóa bằng cách sử dụng thông báo đẩy. Để mang lại trải nghiệm tốt nhất, hãy chọn "Đồng ý" trên bảng thông báo sau khi được yêu cầu bật thông báo đẩy.</value>
<comment>Push notifications for apple products</comment>
</data>
<data name="RateTheApp" xml:space="preserve">
@@ -650,16 +650,16 @@
<value>Xin hãy nhìn nhận và đánh giá tốt cho chúng tôi!</value>
</data>
<data name="RateTheAppDescriptionAppStore" xml:space="preserve">
<value>Xếp hạng App Store sẽ được đặt lại với mỗi bản cập nhật của bitwarden. Xin hãy nhìn nhận và cho chúng tôi với một đánh giá tốt!</value>
<value>Xếp hạng trên App Store sẽ được đặt lại sau mỗi bản cập nhật của Bitwarden. Bạn có thể cảm ơn chúng tôi bằng cách đánh giá 5 sao cho Bitwarden!</value>
</data>
<data name="RegeneratePassword" xml:space="preserve">
<value>Tạo lại mật khẩu</value>
</data>
<data name="RetypeMasterPassword" xml:space="preserve">
<value>Nhập lại mật khẩu chính</value>
<value>Nhập lại mật khẩu ch</value>
</data>
<data name="SearchVault" xml:space="preserve">
<value>Tìm kiếm trong Kho</value>
<value>Tìm kiếm</value>
</data>
<data name="Security" xml:space="preserve">
<value>Bảo mật</value>
@@ -677,7 +677,7 @@
<value>Nhập mã PIN 4 chữ số để mở khóa ứng dụng.</value>
</data>
<data name="ItemInformation" xml:space="preserve">
<value>Mục thông tin</value>
<value>Thông tin mục</value>
</data>
<data name="ItemUpdated" xml:space="preserve">
<value>Đã cập nhật mục.</value>
@@ -697,7 +697,7 @@
<value>Đồng bộ thất bại.</value>
</data>
<data name="SyncVaultNow" xml:space="preserve">
<value>Đồng bộ Kho mật khẩu ngay</value>
<value>Đồng bộ kho mật khẩu ngay</value>
</data>
<data name="TouchID" xml:space="preserve">
<value>Touch ID</value>
@@ -707,7 +707,7 @@
<value>Xác thực hai lớp</value>
</data>
<data name="TwoStepLoginConfirmation" xml:space="preserve">
<value>Xác thực hai lớp giúp cho tài khoản của bạn an toàn hơn bằng cách yêu cầu bạn xác minh thông tin đăng nhập của bạn bằng một thiết bị khác như khóa bảo mật, ứng dụng xác thực, SMS, cuộc gọi điện thoại hoặc email. Bạn có thể bật xác thực hai lớp trong kho bitwarden nền web. Bạn có muốn ghé thăm trang web bây giờ?</value>
<value>Xác thực hai lớp giúp cho tài khoản của bạn an toàn hơn bằng cách yêu cầu bạn xác minh đăng nhập của bạn bằng khóa bảo mật, ứng dụng xác thực, tin nhắn, cuộc gọi điện thoại hoặc email. Bạn có thể bật xác thực hai lớp trong trang web Bitwarden. Bạn có muốn ghé thăm bitwarden.com bây giờ?</value>
</data>
<data name="UnlockWith" xml:space="preserve">
<value>Mở khóa với {0}</value>
@@ -726,10 +726,10 @@
<value>Xem mục</value>
</data>
<data name="WebVault" xml:space="preserve">
<value>Hầm bitwarden trên Web</value>
<value>Trang web Bitwarden</value>
</data>
<data name="WebVaultDescription" xml:space="preserve">
<value>Quản lý các mục đặng nhập của bạn từ mọi trình duyệt web với hầm bitwarden nền web.</value>
<value>Quản lý mật khẩu của bạn từ mọi nơi.</value>
</data>
<data name="Lost2FAApp" xml:space="preserve">
<value>Mất ứng dụng xác thực?</value>
@@ -756,16 +756,16 @@
<comment>This is used for the autofill service. ex. "There are no items in your vault for twitter.com".</comment>
</data>
<data name="BitwardenAutofillServiceNotification" xml:space="preserve">
<value>Khi bạn thấy thông báo tự động điền của bitwarden, bạn có thể nhấn vào nó để khởi chạy dịch vụ tự động điền.</value>
<value>Khi bạn thấy thông báo tự động điền của Bitwarden, bạn có thể nhấn vào nó để chạy dịch vụ tự động điền.</value>
</data>
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
<value>Chạm vào thông báo này để tự động điền thông tin đăng nhập từ kho của bạn.</value>
</data>
<data name="BitwardenAutofillServiceOpenAccessibilitySettings" xml:space="preserve">
<value>Cài đặt trợ năng</value>
<value>Mở cài đặt trợ năng</value>
</data>
<data name="BitwardenAutofillServiceStep1" xml:space="preserve">
<value>1. Trên màn hình Cài đặt Trợ năng, chạm vào 'bitwarden' dưới phần 'Các dịch vụ đã tải xuống'.</value>
<value>1. Trên màn hình Cài đặt Trợ năng, chọn "Bitwarden" trong phần 'Các dịch vụ đã tải xuống'.</value>
</data>
<data name="BitwardenAutofillServiceStep2" xml:space="preserve">
<value>2. Gạt công tắc và nhấn OK để chấp nhận.</value>
@@ -783,7 +783,7 @@
<value>Beta</value>
</data>
<data name="BitwardenAutofillServiceAlert" xml:space="preserve">
<value>Cách dễ nhất để thêm đăng nhập mới vào hầm của bạn là từ dịch vụ Tự động điền của bitwarden. Tìm hiểu thêm về cách sử dụng dịch vụ Tự động điền của bitwarden bằng cách điều hướng đến màn hình 'Công cụ'.</value>
<value>Cách dễ nhất để thêm một đăng nhập mới vào kho của bạn là bằng dịch vụ Tự động điền của Bitwarden. Tìm hiểu thêm về cách sử dụng dịch vụ Tự động điền của Bitwarden trong trang 'Công cụ'.</value>
</data>
<data name="Autofill" xml:space="preserve">
<value>Tự động điền</value>
@@ -792,7 +792,7 @@
<value>Bạn có muốn tự động điền hoặc xem đăng nhập này?</value>
</data>
<data name="BitwardenAutofillServiceMatchConfirm" xml:space="preserve">
<value>Bạn có chắc chắn muốn tự động điền vào thông tin đăng nhập này? Nó không hoàn toàn khớp cho '{0}'.</value>
<value>Bạn có chắc chắn muốn tự động điền vào mục này? Nó không hoàn toàn khớp với "{0}".</value>
</data>
<data name="MatchingItems" xml:space="preserve">
<value>Khớp mục</value>
@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>Khóa bảo mật YubiKey NEO</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Thêm tệp đính kèm mới</value>
@@ -1009,13 +1009,13 @@
<value>Môi trường độc lập</value>
</data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Chỉ định liên kết cơ bản của cài đặt bitwarden tại chỗ của bạn.</value>
<value>Chỉ định URL cơ sở on-premise của bạn để cài đặt máy chủ Bitwarden.</value>
</data>
<data name="ServerUrl" xml:space="preserve">
<value>Địa chỉ máy chủ</value>
</data>
<data name="WebVaultUrl" xml:space="preserve">
<value>Địa chỉ máy chủ kho web</value>
<value>URL máy chủ lưu trữ web</value>
</data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Chạm vào thông báo này để xem thông tin đăng nhập từ kho của bạn.</value>
@@ -1048,7 +1048,7 @@
<value>Đăng nhập</value>
</data>
<data name="TypeSecureNote" xml:space="preserve">
<value>Lưu ý an toàn</value>
<value>Ghi chú bảo mật</value>
</data>
<data name="Address1" xml:space="preserve">
<value>Địa chỉ 1</value>
@@ -1168,13 +1168,13 @@
<value>Vô hiệu hoá biểu tượng trang web</value>
</data>
<data name="DisableWebsiteIconsDescription" xml:space="preserve">
<value>Biểu tượng trang web cung cấp các biểu tượng nhận dạng trang web bên cạnh mỗi mục đăng nhập trong kho mật khẩu của bạn.</value>
<value>Biểu tượng trang web giúp bạn dễ dàng nhận dạng trang web trong kho mật khẩu của bạn.</value>
</data>
<data name="IconsUrl" xml:space="preserve">
<value>Biểu tượng địa chỉ máy chủ</value>
</data>
<data name="AutofillWithBitwarden" xml:space="preserve">
<value>Tự động điền với bitwarden</value>
<value>Tự động điền với Bitwarden</value>
</data>
<data name="VaultIsLocked" xml:space="preserve">
<value>Kho đã khóa</value>
@@ -1192,13 +1192,13 @@
<value>Không có mục nào trong thư mục này.</value>
</data>
<data name="AutofillAccessibilityService" xml:space="preserve">
<value>Dịch vụ Trợ năng Tự động điền</value>
<value>Tự động điền bằng trợ năng</value>
</data>
<data name="AutofillServiceDescription" xml:space="preserve">
<value>Dịch vụ tự động điền của bitwarden sử dụng Bộ khung Tự động điền của Android để hỗ trợ điền thông tin đăng nhập, thẻ tín dụng và thông tin danh tính vào các ứng dụng khác trên thiết bị của bạn.</value>
<value>Dịch vụ tự động điền của Bitwarden sử dụng Bộ khung Tự động điền của Android để hỗ trợ điền thông tin đăng nhập, thẻ tín dụng và thông tin danh tính vào các ứng dụng khác trên thiết bị của bạn.</value>
</data>
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
<value>Sử dụng dịch vụ tự động điền của bitwarden để điền thông tin đăng nhập, thẻ tín dụng và thông tin danh tính vào các ứng dụng khác.</value>
<value>Sử dụng dịch vụ tự động điền của Bitwarden để điền thông tin đăng nhập, thẻ tín dụng và thông tin danh tính vào các ứng dụng khác.</value>
</data>
<data name="BitwardenAutofillServiceOpenAutofillSettings" xml:space="preserve">
<value>Mở cài đặt Tự động điền</value>
@@ -1277,10 +1277,40 @@
<value>Bắt đầu với</value>
</data>
<data name="URIMatchDetection" xml:space="preserve">
<value>Độ phù hợp với URL</value>
<value>Độ khớp với URL</value>
</data>
<data name="MatchDetection" xml:space="preserve">
<value>Độ phù hợp</value>
<value>Độ khớp</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Được, lưu lại</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Tự động điền và lưu</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Tổ chức</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Đặt Yubikey của bạn ở phần đầu thiết bị.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Thử lại</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Để tiếp tục, hãy đặt YubiKey NEO của bạn dựa vào mặt lưng của thiết bị.</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Bạn có thể cần dùng dịch vụ trợ năng vì một số ứng dụng không hỗ trợ dịch vụ tự động điền của Android.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Password Updated</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Updated</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey 安全密钥</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>添加新附件</value>
@@ -1283,4 +1283,34 @@
<value>匹配检测</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>是的,保存</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>自动填充并保存</value>
</data>
<data name="Organization" xml:space="preserve">
<value>组织</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>把你的 Yubikey 靠近设备的顶部。</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>再试一次</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>要继续, 请将您的 YubiKey NEO 设备放在设备背面。</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>当应用程序不支持标准的自动填充服务时, 辅助功能服务可能会很有用。</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>密码更新于</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>更新于</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -330,7 +330,7 @@
<comment>Confirmation message after successfully deleting a login.</comment>
</data>
<data name="Submit" xml:space="preserve">
<value>提交</value>
<value>送出</value>
</data>
<data name="Sync" xml:space="preserve">
<value>同步</value>
@@ -403,7 +403,7 @@
<value>App 小工具</value>
</data>
<data name="AutofillAccessibilityDescription" xml:space="preserve">
<value>使用 Bitwarden 無障礙服務在應用程式和網站中自動填入您的登入資料。</value>
<value>使用 Bitwarden 協助工具服務在應用程式和網站中自動填入您的登入資料。</value>
</data>
<data name="AutofillService" xml:space="preserve">
<value>自動填入</value>
@@ -683,7 +683,7 @@
<value>項目已更新。</value>
</data>
<data name="Submitting" xml:space="preserve">
<value>正在提交...</value>
<value>正在送出...</value>
<comment>Message shown when interacting with the server</comment>
</data>
<data name="Syncing" xml:space="preserve">
@@ -726,7 +726,7 @@
<value>檢視項目</value>
</data>
<data name="WebVault" xml:space="preserve">
<value>Bitwarden 網版密碼庫</value>
<value>Bitwarden 網版密碼庫</value>
</data>
<data name="WebVaultDescription" xml:space="preserve">
<value>使用 Bitwarden 網頁版,從瀏覽器管理您的登入資料。</value>
@@ -762,7 +762,7 @@
<value>按此自動填入來自密碼庫的登入資料。</value>
</data>
<data name="BitwardenAutofillServiceOpenAccessibilitySettings" xml:space="preserve">
<value>開啟無障礙設定</value>
<value>開啟協助工具設定</value>
</data>
<data name="BitwardenAutofillServiceStep1" xml:space="preserve">
<value>1. 在 Android 的協助工具設定中,按一下服務中的 "Bitwarden" 。</value>
@@ -846,7 +846,7 @@
<comment>For 2FA</comment>
</data>
<data name="EnterVerificationCodeEmail" xml:space="preserve">
<value>輸入已傳送至電子郵件地址 {0} 的 6 位數驗證碼</value>
<value>輸入已傳送至電子郵件地址 {0} 的 6 位數驗證碼</value>
<comment>For 2FA</comment>
</data>
<data name="LoginUnavailable" xml:space="preserve">
@@ -857,7 +857,7 @@
<value>此帳戶已啟用兩步驟登入,但是本設備不支援已設定的兩步驟登入方式。請使用已支援的設備,及/或新增可以更好地跨設備的兩步驟登入方法(例如驗證器應用程式)。</value>
</data>
<data name="RecoveryCodeTitle" xml:space="preserve">
<value>復原碼</value>
<value>復原碼</value>
<comment>For 2FA</comment>
</data>
<data name="RememberMe" xml:space="preserve">
@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey 安全鑰匙</value>
<comment>"YubiKey NEO" is the product name and should not be translated.</comment>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>新增附件</value>
@@ -1015,7 +1015,7 @@
<value>伺服器 URL</value>
</data>
<data name="WebVaultUrl" xml:space="preserve">
<value>網版密碼庫伺服器 URL</value>
<value>網版密碼庫伺服器 URL</value>
</data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>按此自動填入來自密碼庫的登入資料。</value>
@@ -1283,4 +1283,34 @@
<value>相符偵測</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>是,我要儲存</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>自動填入並儲存</value>
</data>
<data name="Organization" xml:space="preserve">
<value>組織</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data>
<data name="HoldYubikeyNearTop" xml:space="preserve">
<value>將您的 Yubikey 靠近裝置的頂端。</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>再試一次</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>要繼續的話,請將您的 YubiKey NEO 靠在裝置的背面。</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>當應用程式不支援標準的自動填入服務時, 協助工具服務或許能夠幫助使用。</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>密碼已更新</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>已更新</value>
<comment>ex. Date this item was updated</comment>
</data>
</root>

View File

@@ -196,5 +196,17 @@ namespace Bit.App.Services
_settings.AddOrUpdateValue(Constants.IconsUrl, value);
}
}
public bool ClearCiphersCache
{
get
{
return _settings.GetValueOrDefault(Constants.ClearCiphersCache, false);
}
set
{
_settings.AddOrUpdateValue(Constants.ClearCiphersCache, value);
}
}
}
}

View File

@@ -25,6 +25,7 @@ namespace Bit.App.Services
private readonly ICipherApiRepository _cipherApiRepository;
private readonly ISettingsService _settingsService;
private readonly ICryptoService _cryptoService;
private readonly IAppSettingsService _appSettingsService;
public CipherService(
ICipherRepository cipherRepository,
@@ -33,7 +34,8 @@ namespace Bit.App.Services
IAuthService authService,
ICipherApiRepository cipherApiRepository,
ISettingsService settingsService,
ICryptoService cryptoService)
ICryptoService cryptoService,
IAppSettingsService appSettingsService)
{
_cipherRepository = cipherRepository;
_cipherCollectionRepository = cipherCollectionRepository;
@@ -42,6 +44,7 @@ namespace Bit.App.Services
_cipherApiRepository = cipherApiRepository;
_settingsService = settingsService;
_cryptoService = cryptoService;
_appSettingsService = appSettingsService;
}
public async Task<Cipher> GetByIdAsync(string id)
@@ -59,6 +62,12 @@ namespace Bit.App.Services
public async Task<IEnumerable<Cipher>> GetAllAsync()
{
if(_appSettingsService.ClearCiphersCache)
{
CachedCiphers = null;
_appSettingsService.ClearCiphersCache = false;
}
if(CachedCiphers != null)
{
return CachedCiphers;
@@ -261,6 +270,7 @@ namespace Bit.App.Services
{
await _cipherRepository.UpsertAsync(cipher);
CachedCiphers = null;
_appSettingsService.ClearCiphersCache = true;
}
public async Task<ApiResult> DeleteAsync(string id)
@@ -283,6 +293,7 @@ namespace Bit.App.Services
{
await _cipherRepository.DeleteAsync(id);
CachedCiphers = null;
_appSettingsService.ClearCiphersCache = true;
}
public async Task<byte[]> DownloadAndDecryptAttachmentAsync(string url, string orgId = null)
@@ -348,6 +359,7 @@ namespace Bit.App.Services
await _attachmentRepository.UpsertAsync(attachment);
}
CachedCiphers = null;
_appSettingsService.ClearCiphersCache = true;
}
public async Task<ApiResult> DeleteAttachmentAsync(Cipher cipher, string attachmentId)
@@ -370,6 +382,7 @@ namespace Bit.App.Services
{
await _attachmentRepository.DeleteAsync(attachmentId);
CachedCiphers = null;
_appSettingsService.ClearCiphersCache = true;
}
private Tuple<string, string[]> InfoFromMobileAppUri(string mobileAppUriString)
@@ -455,6 +468,10 @@ namespace Bit.App.Services
}
}
if(!loginUriString.Contains("://") && loginUriString.Contains("."))
{
loginUriString = "http://" + loginUriString;
}
string loginDomainName = null;
if(Uri.TryCreate(loginUriString, UriKind.Absolute, out Uri loginUri)
&& DomainName.TryParseBaseDomain(loginUri.Host, out loginDomainName))

View File

@@ -82,8 +82,25 @@ namespace Bit.App.Services
var encKeyCs = new CipherString(encKey);
try
{
var decBytes = DecryptToBytes(encKeyCs, Key);
_encKey = new SymmetricCryptoKey(decBytes);
byte[] decEncKey = null;
if(encKeyCs.EncryptionType == EncryptionType.AesCbc256_B64)
{
decEncKey = DecryptToBytes(encKeyCs, Key);
}
else if(encKeyCs.EncryptionType == EncryptionType.AesCbc256_HmacSha256_B64)
{
var newKey = StretchKey(Key);
decEncKey = DecryptToBytes(encKeyCs, newKey);
}
else
{
throw new Exception("Unsupported EncKey type");
}
if(decEncKey != null)
{
_encKey = new SymmetricCryptoKey(decEncKey);
}
}
catch
{
@@ -462,8 +479,19 @@ namespace Bit.App.Services
public CipherString MakeEncKey(SymmetricCryptoKey key)
{
var bytes = Crypto.RandomBytes(512 / 8);
return Encrypt(bytes, key);
var encKey = Crypto.RandomBytes(64);
// TODO: Remove hardcoded true/false when we're ready to enable key stretching
if(false && key.Key.Length == 32)
{
var newKey = StretchKey(key);
return Encrypt(encKey, newKey);
}
else if(true || key.Key.Length == 64)
{
return Encrypt(encKey, key);
}
throw new Exception("Invalid key size.");
}
// Some users like to copy/paste passwords from external files. Sometimes this can lead to two different
@@ -477,5 +505,15 @@ namespace Bit.App.Services
.Replace("\n", " ") // New line => space
.Replace(" ", " "); // No-break space (00A0) => space
}
private SymmetricCryptoKey StretchKey(SymmetricCryptoKey key)
{
var newKey = new byte[64];
var encKey = Crypto.HkdfExpand(key.Key, Encoding.UTF8.GetBytes("enc"), 32);
var macKey = Crypto.HkdfExpand(key.Key, Encoding.UTF8.GetBytes("mac"), 32);
encKey.CopyTo(newKey, 0);
macKey.CopyTo(newKey, 32);
return new SymmetricCryptoKey(newKey);
}
}
}

View File

@@ -37,7 +37,7 @@ namespace Bit.App.Services
_stopwatch?.Restart();
}
public async Task<LockType> GetLockTypeAsync(bool forceLock)
public async Task<LockType> GetLockTypeAsync(bool forceLock, bool onlyIfAlreadyLocked = false)
{
// Only lock if they are logged in
if(!_authService.IsAuthenticated)
@@ -59,6 +59,11 @@ namespace Bit.App.Services
}
}
if(onlyIfAlreadyLocked && !_appSettings.Locked)
{
return LockType.None;
}
// What method are we using to unlock?
var fingerprintUnlock = _settings.GetValueOrDefault(Constants.SettingFingerprintUnlockOn, false);
var pinUnlock = _settings.GetValueOrDefault(Constants.SettingPinUnlockOn, false);
@@ -77,14 +82,14 @@ namespace Bit.App.Services
}
}
public async Task CheckLockAsync(bool forceLock)
public async Task CheckLockAsync(bool forceLock, bool onlyIfAlreadyLocked = false)
{
if(TopPageIsLock())
{
return;
}
var lockType = await GetLockTypeAsync(forceLock);
var lockType = await GetLockTypeAsync(forceLock, onlyIfAlreadyLocked);
if(lockType == LockType.None)
{
return;

View File

@@ -177,16 +177,17 @@ namespace Bit.App.Utilities
}
// ref: https://github.com/mirthas/totp-net/blob/master/TOTP/Totp.cs
public static string Totp(string b32Key)
public static string Totp(string key)
{
var key = Base32.FromBase32(b32Key);
if(key == null || key.Length == 0)
var otpParams = new OtpAuth(key);
var b32Key = Base32.FromBase32(otpParams.Secret);
if(b32Key == null || b32Key.Length == 0)
{
return null;
}
var now = Helpers.EpocUtcNow() / 1000;
var sec = now / 30;
var sec = now / otpParams.Period;
var secBytes = BitConverter.GetBytes(sec);
if(BitConverter.IsLittleEndian)
@@ -194,17 +195,36 @@ namespace Bit.App.Utilities
Array.Reverse(secBytes, 0, secBytes.Length);
}
var algorithm = WinRTCrypto.MacAlgorithmProvider.OpenAlgorithm(MacAlgorithm.HmacSha1);
var hasher = algorithm.CreateHash(key);
var algorithm = WinRTCrypto.MacAlgorithmProvider.OpenAlgorithm(otpParams.Algorithm);
var hasher = algorithm.CreateHash(b32Key);
hasher.Append(secBytes);
var hash = hasher.GetValueAndReset();
var offset = (hash[hash.Length - 1] & 0xf);
var i = ((hash[offset] & 0x7f) << 24) | ((hash[offset + 1] & 0xff) << 16) |
var binary = ((hash[offset] & 0x7f) << 24) | ((hash[offset + 1] & 0xff) << 16) |
((hash[offset + 2] & 0xff) << 8) | (hash[offset + 3] & 0xff);
var code = i % (int)Math.Pow(10, 6);
var otp = binary % (int)Math.Pow(10, otpParams.Digits);
return code.ToString().PadLeft(6, '0');
return otp.ToString().PadLeft(otpParams.Digits, '0');
}
// ref: https://tools.ietf.org/html/rfc5869
public static byte[] HkdfExpand(byte[] prk, byte[] info, int size)
{
var hashLen = 32; // sha256
var okm = new byte[size];
var previousT = new byte[0];
var n = (int)Math.Ceiling((double)size / hashLen);
for(int i = 0; i < n; i++)
{
var t = new byte[previousT.Length + info.Length + 1];
previousT.CopyTo(t, 0);
info.CopyTo(t, previousT.Length);
t[t.Length - 1] = (byte)(i + 1);
previousT = ComputeMac(t, prk);
previousT.CopyTo(okm, i * hashLen);
}
return okm;
}
}
}

View File

@@ -47,8 +47,6 @@ namespace Bit.App.Utilities
return iOS;
case Device.Android:
return Android;
case Device.WinPhone:
return WinPhone;
case Device.UWP:
return Windows;
default:
@@ -333,8 +331,9 @@ namespace Bit.App.Utilities
return cell;
}
public static void ProcessFieldsSectionForSave(TableSection fieldsSection, Cipher cipher)
public static List<Tuple<string, string>> ProcessFieldsSectionForSave(TableSection fieldsSection, Cipher cipher)
{
var hiddenFieldValues = new List<Tuple<string, string>>();
if(fieldsSection != null && fieldsSection.Count > 0)
{
var fields = new List<Field>();
@@ -350,6 +349,12 @@ namespace Bit.App.Utilities
entryCell.Entry.Text.Encrypt(cipher.OrganizationId),
Type = entryCell.Entry.IsPassword ? FieldType.Hidden : FieldType.Text
});
if(entryCell.Entry.IsPassword && !string.IsNullOrWhiteSpace(entryCell.Label.Text))
{
hiddenFieldValues.Add(new Tuple<string, string>(entryCell.Label.Text,
entryCell.Entry.Text));
}
}
else if(cell is FormSwitchCell switchCell)
{
@@ -370,6 +375,7 @@ namespace Bit.App.Utilities
{
cipher.Fields = null;
}
return hiddenFieldValues;
}
public static FormEntryCell MakeUriCell(string value, UriMatchType? match, TableSection urisSection, Page page)
@@ -527,5 +533,30 @@ namespace Bit.App.Utilities
page.DisplayAlert(AppResources.InternetConnectionRequiredTitle,
AppResources.InternetConnectionRequiredMessage, AppResources.Ok);
}
public static Dictionary<string, string> GetQueryParams(string urlString)
{
var dict = new Dictionary<string, string>();
if(!Uri.TryCreate(urlString, UriKind.Absolute, out var uri) || string.IsNullOrWhiteSpace(uri.Query))
{
return dict;
}
var pairs = uri.Query.Substring(1).Split('&');
foreach(var pair in pairs)
{
var parts = pair.Split('=');
if(parts.Length < 1)
{
continue;
}
var key = System.Net.WebUtility.UrlDecode(parts[0]).ToLower();
if(!dict.ContainsKey(key))
{
dict.Add(key, parts[1] == null ? string.Empty : System.Net.WebUtility.UrlDecode(parts[1]));
}
}
return dict;
}
}
}

View File

@@ -24,7 +24,7 @@ namespace Bit.iOS.Core.Services
}
}
public float Scale => (float)UIScreen.MainScreen.Scale;
public bool NfcEnabled => false;
public bool NfcEnabled => CoreNFC.NFCNdefReaderSession.ReadingAvailable;
public bool HasCamera => true;
public bool AutofillServiceSupported => false;
public bool HasFaceIdSupport

Some files were not shown because too many files have changed in this diff Show More