1
0
mirror of https://github.com/bitwarden/mobile synced 2025-12-05 23:53:33 +00:00

Compare commits

..

163 Commits

Author SHA1 Message Date
Kyle Spearrin
7ff628ea51 deprecate mac checks on RSA decrypt 2018-11-26 16:05:30 -05:00
Kyle Spearrin
5792372a47 bump version 2018-11-26 09:14:07 -05:00
Kyle Spearrin
9a169251d7 New Crowdin translations (#417)
* New translations AppResources.resx (Norwegian Bokmal)

* New translations AppResources.resx (Portuguese)

* New translations copy.resx (Russian)

* New translations copy.resx (Russian)
2018-11-26 08:41:46 -05:00
Kyle Spearrin
2f0935dbbe update libs 2018-11-23 09:20:39 -05:00
Kyle Spearrin
5af7c7d58a Revert "comment out keyboard dismissal"
This reverts commit ed087b81b4.
2018-11-22 21:16:11 -05:00
Kyle Spearrin
9e1abb13a3 Revert "dont focus on cell tapped"
This reverts commit bbea5fe53c.
2018-11-22 21:16:02 -05:00
Kyle Spearrin
bbea5fe53c dont focus on cell tapped 2018-11-21 21:46:26 -05:00
Kyle Spearrin
ed087b81b4 comment out keyboard dismissal 2018-11-21 07:58:21 -05:00
Kyle Spearrin
0b06c87cb7 New Crowdin translations (#411)
* New translations AppResources.resx (German)

* New translations AppResources.resx (Spanish)

* New translations AppResources.resx (Chinese Simplified)

* New translations AppResources.resx (Czech)

* New translations AppResources.resx (German)

* New translations AppResources.resx (Indonesian)

* New translations AppResources.resx (Italian)

* New translations AppResources.resx (Portuguese)

* New translations AppResources.resx (Romanian)

* New translations AppResources.resx (Russian)

* New translations AppResources.resx (Spanish)
2018-11-20 22:48:03 -05:00
Kyle Spearrin
a9d204d3fa support attachment key, 100k iterations on regist. 2018-11-19 22:24:10 -05:00
Kyle Spearrin
36e263b9ff zh-HK gets traditional chinse 2018-11-15 08:23:45 -05:00
Kyle Spearrin
49af74729f update packages 2018-10-25 21:55:46 -04:00
Kyle Spearrin
aec0415cad New Crowdin translations (#398)
* New translations AppResources.resx (German)

* New translations AppResources.resx (Spanish)
2018-10-24 13:03:55 -04:00
Kyle Spearrin
8c8cec08e5 New Crowdin translations (#395)
* New translations AppResources.resx (Hungarian)

* New translations AppResources.resx (Norwegian Bokmal)

* New translations AppResources.resx (Turkish)
2018-10-16 08:58:57 -04:00
Kyle Spearrin
8d0ee1caba bump version 2018-10-09 09:39:44 -04:00
Kyle Spearrin
a2a6d5a57f New Crowdin translations (#389)
* New translations AppResources.resx (Chinese Traditional)

* New translations AppResources.resx (Czech)

* New translations AppResources.resx (Danish)

* New translations AppResources.resx (Estonian)

* New translations AppResources.resx (Korean)

* New translations AppResources.resx (Portuguese, Brazilian)

* New translations AppResources.resx (Slovak)

* New translations AppResources.resx (Ukrainian)
2018-10-09 09:29:07 -04:00
Kyle Spearrin
9593f330db target android sdk 26 with fixes to HybridWebView 2018-10-08 23:21:29 -04:00
Kyle Spearrin
144d932591 null ref check 2018-10-08 15:04:18 -04:00
Kyle Spearrin
726db336a8 dont try to fill unless has username and password 2018-10-07 07:40:44 -04:00
Kyle Spearrin
8632f7cadc version bump 2018-10-06 19:26:54 -04:00
Kyle Spearrin
525b5fa19a null checks 2018-10-06 17:28:40 -04:00
Kyle Spearrin
b7c6b65a3d bump version 2018-10-03 00:35:06 -04:00
kspearrin
a4f93eea45 ios < 12 fixes 2018-10-03 00:29:42 -04:00
Kyle Spearrin
8d9a5bc08f formatting 2018-10-01 14:37:16 -04:00
Kyle Spearrin
28a93cdcb4 bump version 2018-10-01 14:19:28 -04:00
Kyle Spearrin
d32dd95e12 add minimum os version 2018-10-01 14:19:28 -04:00
kspearrin
f19a8a3cc5 os version checks on auth service apis 2018-09-29 12:14:44 -04:00
Kyle Spearrin
f8d5ee9d5d bump version 2018-09-26 12:38:26 -04:00
kspearrin
a98fb7d41e back button should be white 2018-09-26 12:36:31 -04:00
kspearrin
d2ccc5c022 remove min os 2018-09-25 14:35:41 -04:00
Kyle Spearrin
3339c8b676 fix navbar color on setup 2018-09-24 16:59:05 -04:00
kspearrin
2cc331b136 support loginSearchSegue when no service ids 2018-09-24 16:34:50 -04:00
Kyle Spearrin
df1a65e6a3 fix color on search nav bar 2018-09-24 16:20:17 -04:00
Kyle Spearrin
f416f95b77 reuse code 2018-09-24 16:11:54 -04:00
kspearrin
44fe5af4fb run on main thread fixes 2018-09-24 15:45:36 -04:00
Kyle Spearrin
f394eddc01 throttle fast type searches 2018-09-24 15:30:05 -04:00
kspearrin
07dd9df3ec no search display controller 2018-09-24 15:24:43 -04:00
Kyle Spearrin
340d4ce714 do searching 2018-09-24 15:08:16 -04:00
kspearrin
2870b8331e text changed 2018-09-24 14:57:28 -04:00
Kyle Spearrin
bc79f22e22 implement search delegate 2018-09-24 14:51:37 -04:00
Kyle Spearrin
b3e0b148a6 not translucent 2018-09-24 12:50:58 -04:00
Kyle Spearrin
6131dfeb2c add tint colors to search nav bar 2018-09-24 12:43:19 -04:00
kspearrin
42fc868b68 Search controller for autofill setup 2018-09-24 12:41:08 -04:00
Kyle Spearrin
e9ec02929d Revert "add login search view controller"
This reverts commit 389d7d77c2.
2018-09-24 11:25:43 -04:00
Kyle Spearrin
389d7d77c2 add login search view controller 2018-09-24 11:24:12 -04:00
Kyle Spearrin
03a55d38d3 move power manager check inside try/catch 2018-09-23 08:08:38 -04:00
Kyle Spearrin
5504298251 adjust check green color 2018-09-22 23:49:47 -04:00
Kyle Spearrin
0fff61de34 New Crowdin translations (#374)
* 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-09-22 23:45:30 -04:00
Kyle Spearrin
4db7311611 remove period 2018-09-22 23:43:36 -04:00
Kyle Spearrin
650d970b5e fix GA service methods 2018-09-22 23:37:44 -04:00
Kyle Spearrin
7f796963f3 no need to install sdk 28 anymore 2018-09-22 23:31:42 -04:00
Kyle Spearrin
9231da2f1c Revert "remove credential provider from main app entitle"
This reverts commit 0d422c53d1.
2018-09-22 23:22:48 -04:00
Kyle Spearrin
0d422c53d1 remove credential provider from main app entitle 2018-09-22 23:05:21 -04:00
kspearrin
7bf9354e32 provide credentials if using fingerprint too 2018-09-22 22:06:12 -04:00
kspearrin
277fd67814 add bitwarden domain 2018-09-22 21:58:50 -04:00
Kyle Spearrin
68e9cd3779 only copy totp key is setting not disabled 2018-09-21 23:32:26 -04:00
Kyle Spearrin
73b2ae71a9 copy totp code. derp 2018-09-21 23:29:05 -04:00
kspearrin
f9028245d8 better handle service identifiers 2018-09-21 22:27:20 -04:00
Kyle Spearrin
3fff0617fe replace all on updates 2018-09-21 21:59:11 -04:00
Kyle Spearrin
d958dc6bce replace vs created on save 2018-09-21 21:53:04 -04:00
Kyle Spearrin
045ce42168 add alert for autofill extension 2018-09-21 21:52:46 -04:00
kspearrin
edef84a4f9 return instead of else 2018-09-21 20:40:34 -04:00
kspearrin
ec9b2d7f7d add item to cred store when added from extension 2018-09-21 20:22:13 -04:00
Kyle Spearrin
640beeed23 delete cipher messages passes object 2018-09-21 17:04:54 -04:00
Kyle Spearrin
a998ee84ec fix strings 2018-09-21 16:26:55 -04:00
kspearrin
bd74634201 spacing 2018-09-21 16:25:31 -04:00
Kyle Spearrin
364287028b autofill instructions 2018-09-21 16:20:17 -04:00
Kyle Spearrin
7be8513bb5 updated autofill tools page strings 2018-09-21 16:11:11 -04:00
Kyle Spearrin
89c2f62f11 autofill tools page for ios 12 2018-09-21 16:03:34 -04:00
Kyle Spearrin
fce2a7ba94 cleanup and updated resource strings for autofill 2018-09-21 15:32:12 -04:00
kspearrin
e613198252 updated 2018-09-21 15:15:02 -04:00
Kyle Spearrin
3e240c4d2f setup view controller during config 2018-09-21 15:06:23 -04:00
kspearrin
eee96bf8cf config flow 2018-09-21 14:29:42 -04:00
Kyle Spearrin
471871eb2e done use this. 2018-09-21 12:45:32 -04:00
Kyle Spearrin
225b8b8cd8 Merge branch 'master' of github.com:bitwarden/mobile 2018-09-21 12:45:16 -04:00
kspearrin
cb2d133eb0 remove base calls 2018-09-21 12:00:44 -04:00
kspearrin
d957111249 remove base method calls 2018-09-21 12:00:07 -04:00
Kyle Spearrin
f0a701e134 formatting 2018-09-21 11:25:44 -04:00
kspearrin
0c8c216fba only build id store if authed 2018-09-21 11:23:34 -04:00
kspearrin
f153c7509c build identity store for quick type bar 2018-09-21 11:22:06 -04:00
Kyle Spearrin
197683b722 messages for credential store 2018-09-21 09:57:24 -04:00
Kyle Spearrin
fbce0be457 listen to messages for credential store updates 2018-09-20 23:54:03 -04:00
Kyle Spearrin
24304c2f55 formatting 2018-09-20 23:50:02 -04:00
Kyle Spearrin
b0c6c09cea full sync and cipher modification messages 2018-09-20 23:47:19 -04:00
kspearrin
2732fc93f9 provide credential implementations 2018-09-20 23:24:59 -04:00
Kyle Spearrin
cc9a4a288a fix analytics for autofill events 2018-09-20 23:02:53 -04:00
kspearrin
f57db917d1 wire up shared view controllers 2018-09-20 22:53:23 -04:00
Kyle Spearrin
d32eb9c9bc copy classes to autofill 2018-09-20 22:24:13 -04:00
Kyle Spearrin
219af7f288 extract extension table source 2018-09-20 22:18:25 -04:00
kspearrin
e767b6c5be missing using 2018-09-20 22:06:53 -04:00
Kyle Spearrin
5f1a8017f1 moved view controllers to core library for reuse 2018-09-20 21:54:01 -04:00
kspearrin
df80122ce1 moved cipher model 2018-09-20 16:44:41 -04:00
kspearrin
6904ea118b basic autofill 2018-09-20 16:44:06 -04:00
kspearrin
0baa07daa2 load ioc and stuff 2018-09-20 13:18:30 -04:00
kspearrin
2abf407b36 move to default storyboard from xcode 2018-09-20 12:53:53 -04:00
kspearrin
55dc9cbfc7 log debug 2018-09-20 09:29:48 -04:00
Kyle Spearrin
fa15a10ae0 entitle main project for autofill 2018-09-19 23:18:53 -04:00
Kyle Spearrin
e821d8a135 reference autofill project 2018-09-19 23:10:26 -04:00
kspearrin
cefcc14d4d update autofill files 2018-09-19 23:08:39 -04:00
Kyle Spearrin
a52d1e1506 autofill project 2018-09-19 22:25:16 -04:00
Kyle Spearrin
42df1aecd5 New Crowdin translations (#371)
* New translations AppResources.resx (Danish)

* New translations copy.resx (Danish)

* New translations copy.resx (Danish)

* New translations AppResources.resx (Finnish)

* New translations AppResources.resx (French)

* New translations AppResources.resx (Hungarian)

* New translations AppResources.resx (Korean)
2018-09-17 15:33:18 -04:00
Kyle Spearrin
920f4fc525 trim email 2018-09-15 23:36:32 -04:00
Kyle Spearrin
d57d583076 bump version 2018-09-14 16:36:38 -04:00
Kyle Spearrin
1c8cd2dcbb remove unused const strings 2018-09-12 15:53:27 -04:00
Kyle Spearrin
bb66a6c805 add firefox nightly, resolves #368 2018-09-10 08:17:22 -04:00
Kyle Spearrin
10ecdfbe31 add more autofill compat support 2018-09-06 00:17:26 -04:00
Kyle Spearrin
43dad1df63 dont need to rdp anymore 2018-09-05 17:37:05 -04:00
Kyle Spearrin
fdcc6b0cb8 change back to pwd, out-null 2018-09-05 17:19:53 -04:00
Kyle Spearrin
ac82d6bc6b update android using sdkmanager 2018-09-05 17:01:28 -04:00
Kyle Spearrin
a8e98cfa78 rdp for debugging 2018-09-05 16:37:13 -04:00
Kyle Spearrin
fa51314639 update-android for appveyor 2018-09-04 08:00:02 -04:00
Kyle Spearrin
3e0097c22c update android sdks on appveyor 2018-09-04 07:58:09 -04:00
Kyle Spearrin
e62ff2fe36 fix appveoyr yml 2018-09-03 23:05:54 -04:00
Kyle Spearrin
88a13eb54f update vs 2018-09-03 23:02:37 -04:00
Kyle Spearrin
355dc151c4 add more compat 2018-09-03 22:32:55 -04:00
Kyle Spearrin
4f0ea44078 update to android 9, test compat autofill mode. 2018-09-03 10:09:17 -04:00
Kyle Spearrin
9cc12fd577 check enabled too 2018-08-29 13:45:58 -04:00
Kyle Spearrin
960c2567bd can access premium for orgs 2018-08-29 12:36:44 -04:00
Kyle Spearrin
430e4dd445 rename UserPushNotification 2018-08-28 08:47:47 -04:00
Kyle Spearrin
1ec31c6899 add support for log out notification 2018-08-28 08:41:23 -04:00
Kyle Spearrin
42c21ce892 PBKDF2 is SHA256 2018-08-28 08:41:23 -04:00
kspearrin
d278fde5f2 fix missing params on extension 2018-08-24 17:10:52 -04:00
Kyle Spearrin
2616a5f500 bump versions 2018-08-21 16:29:31 -04:00
BestPig
cc58f7730e Use BaseUrl when opening web vault if defined (#360) 2018-08-20 13:32:16 -04:00
Kyle Spearrin
d49e001b21 New Crowdin translations (#358)
* New translations AppResources.resx (Croatian)

* New translations AppResources.resx (Danish)

* New translations copy.resx (Danish)

* New translations copy.resx (Danish)

* New translations AppResources.resx (Estonian)

* New translations AppResources.resx (French)

* New translations copy.resx (French)

* New translations copy.resx (French)

* New translations AppResources.resx (Portuguese, Brazilian)
2018-08-16 15:18:21 -04:00
Kyle Spearrin
f12ceb69ce update public suffix list 2018-08-15 08:44:21 -04:00
Kyle Spearrin
7862005055 support for prelogin kdf params 2018-08-14 16:46:31 -04:00
Kyle Spearrin
e70dbf8d8d add UmAlQuraCalendar 2018-08-13 07:55:26 -04:00
Kyle Spearrin
16ee34d7a7 set calendars removed by linker 2018-08-13 07:54:08 -04:00
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
210 changed files with 13234 additions and 6170 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,9 +1,14 @@
#init:
# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
#on_finish:
# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
install:
- choco install cloc --no-progress
- "cloc --vcs git --exclude-dir Resources,store,test,UWP,Properties --include-lang C#,JavaScript,TypeScript,PowerShell"
- 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"
# - ps: .\src\Android\update-android.ps1
before_build:
- nuget restore
- IF DEFINED keystore_dec_secret nuget install secure-file -ExcludeVersion

View File

@@ -34,6 +34,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
SECURITY.md = SECURITY.md
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "iOS.Autofill", "src\iOS.Autofill\iOS.Autofill.csproj", "{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
@@ -456,6 +458,50 @@ Global
{D5D91152-CB01-4F24-A503-304D3A94408B}.Release|x64.Build.0 = Release|Any CPU
{D5D91152-CB01-4F24-A503-304D3A94408B}.Release|x86.ActiveCfg = Release|Any CPU
{D5D91152-CB01-4F24-A503-304D3A94408B}.Release|x86.Build.0 = Release|Any CPU
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Ad-Hoc|ARM.ActiveCfg = Ad-Hoc|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Ad-Hoc|iPhoneSimulator
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Ad-Hoc|iPhoneSimulator.Build.0 = Ad-Hoc|iPhoneSimulator
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Ad-Hoc|x64.ActiveCfg = Ad-Hoc|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Ad-Hoc|x86.ActiveCfg = Ad-Hoc|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.AppStore|Any CPU.ActiveCfg = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.AppStore|ARM.ActiveCfg = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.AppStore|iPhone.ActiveCfg = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.AppStore|iPhone.Build.0 = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.AppStore|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.AppStore|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.AppStore|x64.ActiveCfg = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.AppStore|x86.ActiveCfg = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Debug|Any CPU.ActiveCfg = Debug|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Debug|ARM.ActiveCfg = Debug|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Debug|iPhone.ActiveCfg = Debug|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Debug|iPhone.Build.0 = Debug|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Debug|x64.ActiveCfg = Debug|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Debug|x86.ActiveCfg = Debug|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.FDroid|Any CPU.ActiveCfg = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.FDroid|Any CPU.Build.0 = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.FDroid|ARM.ActiveCfg = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.FDroid|ARM.Build.0 = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.FDroid|iPhone.ActiveCfg = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.FDroid|iPhone.Build.0 = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.FDroid|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.FDroid|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.FDroid|x64.ActiveCfg = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.FDroid|x64.Build.0 = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.FDroid|x86.ActiveCfg = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.FDroid|x86.Build.0 = AppStore|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Release|Any CPU.ActiveCfg = Release|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Release|ARM.ActiveCfg = Release|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Release|iPhone.ActiveCfg = Release|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Release|iPhone.Build.0 = Release|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Release|x64.ActiveCfg = Release|iPhone
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F}.Release|x86.ActiveCfg = Release|iPhone
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -469,6 +515,7 @@ Global
{2E399654-26A2-46F6-B9CA-1B496A3F370A} = {92470CBD-9047-4C3C-8EA3-D972D6622D84}
{8A279EE4-4537-4656-9C93-44945E594556} = {EC730FD9-F623-4B6C-B503-95CDCFBCF277}
{D5D91152-CB01-4F24-A503-304D3A94408B} = {2E399654-26A2-46F6-B9CA-1B496A3F370A}
{C2B7ADCA-5964-43C5-A7C8-D3B6F8023F4F} = {EC730FD9-F623-4B6C-B503-95CDCFBCF277}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {318CB2DF-0118-43A3-AC83-56BADCF71CCD}

View File

@@ -15,7 +15,7 @@
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
<AndroidUseLatestPlatformSdk>false</AndroidUseLatestPlatformSdk>
<TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v9.0</TargetFrameworkVersion>
<AndroidSupportedAbis>armeabi,armeabi-v7a,x86</AndroidSupportedAbis>
<AndroidHttpClientHandlerType>Xamarin.Android.Net.AndroidClientHandler</AndroidHttpClientHandlerType>
<AndroidStoreUncompressedFileExtensions />
@@ -155,6 +155,7 @@
<ItemGroup>
<None Include="8bit.keystore.enc" />
<GoogleServicesJson Include="google-services.json" />
<None Include="update-android.ps1" />
<None Include="ci-build-apks.ps1" />
<None Include="google-services.json.enc" />
<None Include="Resources\AboutResources.txt" />
@@ -858,20 +859,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.4.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.4" />
<PackageReference Include="Plugin.CurrentActivity" Version="2.1.0.4" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\bottom_nav_bg.xml" />

View File

@@ -17,6 +17,24 @@ namespace Bit.Android.Autofill
{
private static int _pendingIntentId = 0;
// These browser work natively with the autofill framework
public static HashSet<string> TrustedBrowsers = new HashSet<string>
{
"org.mozilla.focus","org.mozilla.klar","com.duckduckgo.mobile.android"
};
// These browsers work using the compatibility shim for the autofill framework
public static HashSet<string> CompatBrowsers = new HashSet<string>
{
"org.mozilla.firefox","org.mozilla.firefox_beta","com.microsoft.emmx","com.android.chrome",
"com.chrome.beta","com.android.browser","com.brave.browser","com.opera.browser",
"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","mark.via.gp","org.bromite.bromite","org.chromium.chrome","com.kiwibrowser.browser",
"com.ecosia.android", "com.opera.mini.native.beta","org.mozilla.fennec_aurora"
};
public static async Task<List<FilledItem>> GetFillItemsAsync(Parser parser, ICipherService service)
{
var items = new List<FilledItem>();
@@ -62,7 +80,7 @@ namespace Bit.Android.Autofill
}
responseBuilder.AddDataset(BuildVaultDataset(context, parser.FieldCollection, parser.Uri, locked));
AddSaveInfo(responseBuilder, parser.FieldCollection);
AddSaveInfo(parser, responseBuilder, parser.FieldCollection);
responseBuilder.SetIgnoredIds(parser.FieldCollection.IgnoreAutofillIds.ToArray());
return responseBuilder.Build();
}
@@ -126,8 +144,16 @@ namespace Bit.Android.Autofill
return view;
}
public static void AddSaveInfo(FillResponse.Builder responseBuilder, FieldCollection fields)
public static void AddSaveInfo(Parser parser, FillResponse.Builder responseBuilder, FieldCollection fields)
{
// Docs state that password fields cannot be reliably saved in Compat mode since they will show as
// masked values.
var compatBrowser = CompatBrowsers.Contains(parser.PackageName);
if(compatBrowser && fields.SaveType == SaveDataType.Password)
{
return;
}
var requiredIds = fields.GetRequiredSaveFields();
if(fields.SaveType == SaveDataType.Generic || requiredIds.Length == 0)
{
@@ -140,6 +166,10 @@ namespace Bit.Android.Autofill
{
saveBuilder.SetOptionalIds(optionalIds);
}
if(compatBrowser)
{
saveBuilder.SetFlags(SaveFlags.SaveOnAllViewsInvisible);
}
responseBuilder.SetSaveInfo(saveBuilder.Build());
}
}

View File

@@ -7,15 +7,6 @@ namespace Bit.Android.Autofill
{
public class Parser
{
public static HashSet<string> TrustedBrowsers = new HashSet<string>
{
"org.mozilla.focus","org.mozilla.firefox","org.mozilla.firefox_beta","com.microsoft.emmx",
"com.android.chrome","com.chrome.beta","com.android.browser","com.brave.browser","com.opera.browser",
"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","mark.via.gp","org.bromite.bromite"
};
public static HashSet<string> ExcludedPackageIds = new HashSet<string>
{
@@ -93,7 +84,8 @@ namespace Bit.Android.Autofill
ParseNode(node.RootViewNode);
}
if(!TrustedBrowsers.Contains(PackageName))
if(!AutofillHelpers.TrustedBrowsers.Contains(PackageName) &&
!AutofillHelpers.CompatBrowsers.Contains(PackageName))
{
WebDomain = null;
}

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"),
@@ -46,6 +47,7 @@ namespace Bit.Android
(s) => s.Split(new char[]{' ', '<27>'}).FirstOrDefault()), // 0 = Regular Space, 1 = No-break space (00A0)
new Browser("org.mozilla.firefox", "url_bar_title"),
new Browser("org.mozilla.firefox_beta", "url_bar_title"),
new Browser("org.mozilla.fennec_aurora", "url_bar_title"),
new Browser("org.mozilla.focus", "display_url"),
new Browser("org.mozilla.klar", "display_url"),
new Browser("com.ghostery.android.ghostery", "search_field"),
@@ -65,6 +67,8 @@ namespace Bit.Android
new Browser("com.duckduckgo.mobile.android", "omnibarTextInput"),
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
@@ -101,18 +105,18 @@ namespace Bit.Android
public override void OnAccessibilityEvent(AccessibilityEvent e)
{
var powerManager = (PowerManager)GetSystemService(PowerService);
if(Build.VERSION.SdkInt > BuildVersionCodes.KitkatWatch && !powerManager.IsInteractive)
{
return;
}
else if(Build.VERSION.SdkInt < BuildVersionCodes.Lollipop && !powerManager.IsScreenOn)
{
return;
}
try
{
var powerManager = (PowerManager)GetSystemService(PowerService);
if(Build.VERSION.SdkInt > BuildVersionCodes.KitkatWatch && !powerManager.IsInteractive)
{
return;
}
else if(Build.VERSION.SdkInt < BuildVersionCodes.Lollipop && !powerManager.IsScreenOn)
{
return;
}
if(SkipPackage(e?.PackageName))
{
return;
@@ -126,7 +130,6 @@ namespace Bit.Android
//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 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

@@ -7,7 +7,6 @@ using Android.Webkit;
using AWebkit = Android.Webkit;
using Java.Interop;
using Android.Content;
using Plugin.CurrentActivity;
[assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))]
namespace Bit.Android.Controls
@@ -16,9 +15,13 @@ namespace Bit.Android.Controls
{
private const string JSFunction = "function invokeCSharpAction(data){jsBridge.invokeAction(data);}";
private readonly Context _context;
public HybridWebViewRenderer(Context context)
: base(context)
{ }
{
_context = context;
}
protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e)
{
@@ -26,8 +29,9 @@ namespace Bit.Android.Controls
if(Control == null)
{
var webView = new AWebkit.WebView(CrossCurrentActivity.Current.Activity);
var webView = new AWebkit.WebView(_context);
webView.Settings.JavaScriptEnabled = true;
webView.SetWebViewClient(new JSWebViewClient(string.Format("javascript: {0}", JSFunction)));
SetNativeControl(webView);
}
@@ -42,15 +46,6 @@ namespace Bit.Android.Controls
{
Control.AddJavascriptInterface(new JSBridge(this), "jsBridge");
Control.LoadUrl(Element.Uri);
InjectJS(JSFunction);
}
}
private void InjectJS(string script)
{
if(Control != null)
{
Control.LoadUrl(string.Format("javascript: {0}", script));
}
}
@@ -74,5 +69,21 @@ namespace Bit.Android.Controls
}
}
}
public class JSWebViewClient : WebViewClient
{
private readonly string _javascript;
public JSWebViewClient(string javascript)
{
_javascript = javascript;
}
public override void OnPageFinished(AWebkit.WebView view, string url)
{
base.OnPageFinished(view, url);
view.EvaluateJavascript(_javascript, null);
}
}
}
}

View File

@@ -233,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,8 @@ 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 +35,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 +56,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 +70,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 +119,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 +135,13 @@ namespace Bit.Android
container.Verify();
Resolver.SetResolver(new SimpleInjectorResolver(container));
}
public void OnProviderInstallFailed(int errorCode, Intent recoveryIntent)
{
}
public void OnProviderInstalled()
{
}
}
}

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.x8bit.bitwarden" android:versionName="1.17.0" android:installLocation="auto" android:versionCode="502" xmlns:tools="http://schemas.android.com/tools">
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.x8bit.bitwarden" android:versionName="1.20.0" android:installLocation="auto" android:versionCode="502" xmlns:tools="http://schemas.android.com/tools">
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="26" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NFC" />
@@ -31,7 +31,7 @@
<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>

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,78 @@
<?xml version="1.0" encoding="utf-8" ?>
<autofill-service
xmlns:android="http://schemas.android.com/apk/res/android" />
<autofill-service xmlns:android="http://schemas.android.com/apk/res/android">
<compatibility-package
android:name="com.android.chrome"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.chrome.beta"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.chrome.dev"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.chrome.canary"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.microsoft.emmx"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.opera.browser"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.opera.browser.beta"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.opera.mini.native"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.opera.mini.native.beta"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.sec.android.app.sbrowser"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.sec.android.app.sbrowser.beta"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="org.mozilla.fennec_aurora"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="org.mozilla.firefox"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="org.mozilla.firefox_beta"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.brave.browser"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.google.android.apps.chrome"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.google.android.apps.chrome_dev"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.yandex.browser"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="org.codeaurora.swe.browser"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.amazon.cloud9"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="mark.via.gp"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="org.bromite.bromite"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="org.chromium.chrome"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.kiwibrowser.browser"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.ecosia.android"
android:maxLongVersionCode="10000000000"/>
</autofill-service>

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

@@ -25,6 +25,7 @@ using System.Linq;
using Plugin.Settings.Abstractions;
using Android.Views.InputMethods;
using Android.Widget;
using Bit.App.Utilities;
namespace Bit.Android.Services
{
@@ -240,10 +241,9 @@ namespace Bit.Android.Services
}
else
{
var isPremium = Resolver.Resolve<ITokenService>()?.TokenPremium ?? false;
var settings = Resolver.Resolve<ISettings>();
var autoCopyEnabled = !settings.GetValueOrDefault(Constants.SettingDisableTotpCopy, false);
if(isPremium && autoCopyEnabled && cipher.LoginTotp?.Value != null)
if(Helpers.CanAccessPremium() && autoCopyEnabled && cipher.LoginTotp?.Value != null)
{
CopyToClipboard(App.Utilities.Crypto.Totp(cipher.LoginTotp.Value));
}

View File

@@ -41,6 +41,11 @@ namespace Bit.Android.Services
TrackEvent("AutofillService", eventName, label);
}
public void TrackAutofillExtensionEvent(string eventName, string label = null)
{
TrackExtensionEvent(eventName, label);
}
public void TrackEvent(string category, string eventName, string label = null)
{
var builder = new HitBuilders.EventBuilder();

View File

@@ -54,7 +54,8 @@ namespace Bit.Android.Services
if(androidLanguage.StartsWith("zh"))
{
if(androidLanguage.Contains("Hant") || androidLanguage.Contains("TW"))
if(androidLanguage.Contains("Hant") || androidLanguage.Contains("TW") ||
androidLanguage.Contains("HK") || androidLanguage.Contains("MO"))
{
netLanguage = "zh-Hant";
}

View File

@@ -0,0 +1,13 @@
dir "${env:ProgramFiles(x86)}\Android\android-sdk\platforms"
dir "${env:ProgramFiles(x86)}\Android\android-sdk\build-tools"
$pwd = Get-Location
cd "${env:ProgramFiles(x86)}\Android\android-sdk\tools\bin"
.\sdkmanager --list
Echo 'y' | .\sdkmanager "platforms;android-28" "build-tools;28.0.2" | Out-Null
Echo 'y' | .\sdkmanager --update | Out-Null
dir "${env:ProgramFiles(x86)}\Android\android-sdk\platforms"
dir "${env:ProgramFiles(x86)}\Android\android-sdk\build-tools"
cd $pwd

View File

@@ -6,6 +6,7 @@ namespace Bit.App.Abstractions
{
public interface IAccountsApiRepository
{
Task<ApiResult<PreloginResponse>> PostPreloginAsync(PreloginRequest requestObj);
Task<ApiResult> PostRegisterAsync(RegisterRequest requestObj);
Task<ApiResult> PostPasswordHintAsync(PasswordHintRequest requestObj);
Task<ApiResult<DateTime?>> GetAccountRevisionDateAsync();

View File

@@ -6,7 +6,7 @@ namespace Bit.App.Abstractions
{
public interface ICipherApiRepository : IApiRepository<CipherRequest, CipherResponse, string>
{
Task<ApiResult<CipherResponse>> PostAttachmentAsync(string cipherId, byte[] data, string fileName);
Task<ApiResult<CipherResponse>> PostAttachmentAsync(string cipherId, byte[] data, string key, string fileName);
Task<ApiResult> DeleteAttachmentAsync(string cipherId, string attachmentId);
}
}

View File

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

View File

@@ -11,6 +11,8 @@ namespace Bit.App.Abstractions
string PreviousUserId { get; }
bool UserIdChanged { get; }
string Email { get; set; }
KdfType Kdf { get; set; }
int KdfIterations { get; set; }
string PIN { get; set; }
bool BelongsToOrganization(string orgId);
void LogOut(string logoutMessage = null);

View File

@@ -16,10 +16,10 @@ namespace Bit.App.Abstractions
Task<IEnumerable<Cipher>> GetAllByCollectionAsync(string collectionId);
Task<Tuple<IEnumerable<Cipher>, IEnumerable<Cipher>, IEnumerable<Cipher>>> GetAllAsync(string uriString);
Task<ApiResult<CipherResponse>> SaveAsync(Cipher cipher);
Task UpsertDataAsync(CipherData cipher);
Task UpsertDataAsync(CipherData cipher, bool sendMessage, bool created);
Task<ApiResult> DeleteAsync(string id);
Task DeleteDataAsync(string id);
Task<byte[]> DownloadAndDecryptAttachmentAsync(string url, string orgId = null);
Task DeleteDataAsync(string id, bool sendMessage);
Task<byte[]> DownloadAndDecryptAttachmentAsync(string url, CipherString key, string orgId = null);
Task<ApiResult<CipherResponse>> EncryptAndSaveAttachmentAsync(Cipher cipher, byte[] data, string fileName);
Task UpsertAttachmentDataAsync(IEnumerable<AttachmentData> attachments);
Task<ApiResult> DeleteAttachmentAsync(Cipher cipher, string attachmentId);

View File

@@ -1,4 +1,5 @@
using Bit.App.Models;
using Bit.App.Enums;
using Bit.App.Models;
using Bit.App.Models.Api;
using System;
using System.Collections.Generic;
@@ -23,10 +24,9 @@ namespace Bit.App.Abstractions
byte[] RsaDecryptToBytes(CipherString encyptedValue, byte[] privateKey);
CipherString Encrypt(string plaintextValue, SymmetricCryptoKey key = null);
byte[] EncryptToBytes(byte[] plainBytes, SymmetricCryptoKey key = null);
SymmetricCryptoKey MakeKeyFromPassword(string password, string salt);
string MakeKeyFromPasswordBase64(string password, string salt);
SymmetricCryptoKey MakeKeyFromPassword(string password, string salt, KdfType kdf, int kdfIterations);
byte[] HashPassword(SymmetricCryptoKey key, string password);
string HashPasswordBase64(SymmetricCryptoKey key, string password);
CipherString MakeEncKey(SymmetricCryptoKey key);
Tuple<SymmetricCryptoKey, CipherString> MakeEncKey(SymmetricCryptoKey key);
}
}

View File

@@ -7,6 +7,7 @@ namespace Bit.App.Abstractions
void TrackPage(string pageName);
void TrackAppEvent(string eventName, string label = null);
void TrackExtensionEvent(string eventName, string label = null);
void TrackAutofillExtensionEvent(string eventName, string label = null);
void TrackEvent(string category, string eventName, string label = null);
void TrackException(string message, bool fatal);
void Dispatch(Action completionHandler = null);

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

@@ -317,6 +317,11 @@ namespace Bit.App
AppResources.Culture = ci;
_localizeService.SetLocale(ci);
}
// Calendars are removed by linker. ref https://bugzilla.xamarin.com/show_bug.cgi?id=59077
new System.Globalization.ThaiBuddhistCalendar();
new System.Globalization.HijriCalendar();
new System.Globalization.UmAlQuraCalendar();
}
}
}

View File

@@ -25,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.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="sqlite-net-pcl" Version="1.5.231" />
<PackageReference Include="System.Net.Http" Version="4.3.4" />
<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.4.859" />
<PackageReference Include="Xamarin.Forms" Version="3.4.0.1008975" />
<PackageReference Include="XLabs.IoC" Version="2.0.5782" />
<PackageReference Include="ZXing.Net.Mobile.Forms" Version="2.1.47" />
</ItemGroup>

View File

@@ -47,6 +47,7 @@
public const string IconsUrl = "other:iconsUrl";
public const string FailedPinAttempts = "other:failedPinAttempts";
public const string ClearCiphersCache = "other:clearCiphersCache";
public const string OrgGivesPremium = "other:orgGivesPremium";
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
};

7
src/App/Enums/KdfType.cs Normal file
View File

@@ -0,0 +1,7 @@
namespace Bit.App.Enums
{
public enum KdfType : short
{
PBKDF2_SHA256 = 0
}
}

View File

@@ -13,6 +13,8 @@
SyncFolderCreate = 7,
SyncFolderUpdate = 8,
SyncCipherDelete = 9,
SyncSettings = 10
SyncSettings = 10,
LogOut = 11,
}
}

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

@@ -0,0 +1,7 @@
namespace Bit.App.Models.Api
{
public class PreloginRequest
{
public string Email { get; set; }
}
}

View File

@@ -1,4 +1,6 @@
namespace Bit.App.Models.Api
using Bit.App.Enums;
namespace Bit.App.Models.Api
{
public class RegisterRequest
{
@@ -7,5 +9,7 @@
public string MasterPasswordHash { get; set; }
public string MasterPasswordHint { get; set; }
public string Key { get; set; }
public KdfType Kdf { get; set; }
public int KdfIterations { get; set; }
}
}

View File

@@ -5,6 +5,7 @@
public string Id { get; set; }
public string Url { get; set; }
public string FileName { get; set; }
public string Key { get; set; }
public string Size { get; set; }
public string SizeName { 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

@@ -0,0 +1,10 @@
using Bit.App.Enums;
namespace Bit.App.Models.Api
{
public class PreloginResponse
{
public KdfType Kdf { get; set; }
public int KdfIterations { get; set; }
}
}

View File

@@ -8,7 +8,10 @@ namespace Bit.App.Models.Api
public string Name { get; set; }
public bool UseGroups { get; set; }
public bool UseDirectory { get; set; }
public bool UseEvents { get; set; }
public bool UseTotp { get; set; }
public bool Use2fa { get; set; }
public bool UsersGetPremium { get; set; }
public int Seats { get; set; }
public int MaxCollections { get; set; }
public short? MaxStorageGb { get; set; }

View File

@@ -13,6 +13,7 @@ namespace Bit.App.Models
Id = data.Id;
Url = data.Url;
FileName = data.FileName != null ? new CipherString(data.FileName) : null;
Key = data.Key != null ? new CipherString(data.Key) : null;
SetSize(data.Size);
SizeName = data.SizeName;
}
@@ -22,6 +23,7 @@ namespace Bit.App.Models
Id = response.Id;
Url = response.Url;
FileName = response.FileName != null ? new CipherString(response.FileName) : null;
Key = response.Key != null ? new CipherString(response.Key) : null;
SetSize(response.Size);
SizeName = response.SizeName;
}
@@ -29,6 +31,7 @@ namespace Bit.App.Models
public string Id { get; set; }
public string Url { get; set; }
public CipherString FileName { get; set; }
public CipherString Key { get; set; }
public long Size { get; set; }
public string SizeName { 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

@@ -16,6 +16,7 @@ namespace Bit.App.Models.Data
LoginId = cipherId;
Url = attachment.Url;
FileName = attachment.FileName?.EncryptedString;
Key = attachment.Key?.EncryptedString;
Size = attachment.Size.ToString();
SizeName = attachment.SizeName;
}
@@ -26,6 +27,7 @@ namespace Bit.App.Models.Data
LoginId = cipherId;
Url = response.Url;
FileName = response.FileName;
Key = response.Key;
Size = response.Size;
SizeName = response.SizeName;
}
@@ -37,6 +39,7 @@ namespace Bit.App.Models.Data
public string LoginId { get; set; }
public string Url { get; set; }
public string FileName { get; set; }
public string Key { get; set; }
public string Size { get; set; }
public string SizeName { get; set; }

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

@@ -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;
@@ -44,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;
@@ -156,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
@@ -523,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)
{
@@ -533,6 +579,7 @@ namespace Bit.App.Models.Page
{
Id = attachment.Id,
Name = attachment.FileName?.Decrypt(cipher.OrganizationId),
Key = attachment.Key,
SizeName = attachment.SizeName,
Size = attachment.Size,
Url = attachment.Url
@@ -624,6 +671,7 @@ namespace Bit.App.Models.Page
{
public string Id { get; set; }
public string Name { get; set; }
public CipherString Key { get; set; }
public string SizeName { get; set; }
public long Size { get; set; }
public string Url { get; set; }
@@ -693,7 +741,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

@@ -1,6 +1,6 @@
using System;
using System.Collections.Generic;
using Bit.App.Enums;
using Newtonsoft.Json.Linq;
namespace Bit.App.Models
{
@@ -19,6 +19,7 @@ namespace Bit.App.Models
public string Id { get; set; }
public string UserId { get; set; }
public string OrganizationId { get; set; }
public List<Guid> CollectionIds { get; set; }
public DateTime RevisionDate { get; set; }
}
@@ -29,7 +30,7 @@ namespace Bit.App.Models
public DateTime RevisionDate { get; set; }
}
public class SyncUserPushNotification
public class UserPushNotification
{
public string UserId { get; set; }
public DateTime Date { 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
{
@@ -151,7 +151,8 @@ namespace Bit.App.Pages
return;
}
var key = _cryptoService.MakeKeyFromPassword(PasswordCell.Entry.Text, _authService.Email);
var key = _cryptoService.MakeKeyFromPassword(PasswordCell.Entry.Text, _authService.Email,
_authService.Kdf, _authService.KdfIterations);
if(key.Key.SequenceEqual(_cryptoService.Key.Key))
{
_appSettingsService.Locked = false;

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())
@@ -254,7 +254,7 @@ namespace Bit.App.Pages
{
TokenCell = new FormEntryCell("", isPassword: true, imageSource: "lock",
useLabelAsPlaceholder: true);
TokenCell.Entry.ReturnType = ReturnType.Go;
TokenCell.Entry.TargetReturnType = Enums.ReturnType.Go;
section.Insert(0, TokenCell);
}
@@ -335,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;

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)
{
@@ -192,8 +192,10 @@ namespace Bit.App.Pages
return;
}
var normalizedEmail = EmailCell.Entry.Text.ToLower();
var key = _cryptoService.MakeKeyFromPassword(PasswordCell.Entry.Text, normalizedEmail);
var kdf = Enums.KdfType.PBKDF2_SHA256;
var kdfIterations = 100000;
var normalizedEmail = EmailCell.Entry.Text.ToLower().Trim();
var key = _cryptoService.MakeKeyFromPassword(PasswordCell.Entry.Text, normalizedEmail, kdf, kdfIterations);
var encKey = _cryptoService.MakeEncKey(key);
var request = new RegisterRequest
{
@@ -201,7 +203,9 @@ namespace Bit.App.Pages
MasterPasswordHash = _cryptoService.HashPasswordBase64(key, PasswordCell.Entry.Text),
MasterPasswordHint = !string.IsNullOrWhiteSpace(PasswordHintCell.Entry.Text)
? PasswordHintCell.Entry.Text : null,
Key = encKey.EncryptedString
Key = encKey.Item2.EncryptedString,
Kdf = kdf,
KdfIterations = kdfIterations
};
await _deviceActionService.ShowLoadingAsync(AppResources.CreatingAccount);

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

@@ -0,0 +1,113 @@
using System;
using Bit.App.Controls;
using Xamarin.Forms;
using Bit.App.Resources;
using FFImageLoading.Forms;
namespace Bit.App.Pages
{
public class ToolsAutofillPage : ExtendedContentPage
{
public ToolsAutofillPage()
{
Init();
}
public void Init()
{
var getAccessLabel = new Label
{
Text = AppResources.ExtensionInstantAccess,
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Center,
HorizontalTextAlignment = TextAlignment.Center,
LineBreakMode = LineBreakMode.WordWrap,
FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)),
Margin = new Thickness(0, 0, 0, 15),
};
var turnOnLabel = new Label
{
Text = AppResources.AutofillTurnOn,
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Center,
HorizontalTextAlignment = TextAlignment.Center,
LineBreakMode = LineBreakMode.WordWrap,
Margin = new Thickness(0, 0, 0, 15),
};
var turnOnLabel1 = new Label
{
Text = AppResources.AutofillTurnOn1,
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Start,
HorizontalTextAlignment = TextAlignment.Start,
LineBreakMode = LineBreakMode.WordWrap
};
var turnOnLabel2 = new Label
{
Text = AppResources.AutofillTurnOn2,
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Start,
HorizontalTextAlignment = TextAlignment.Start,
LineBreakMode = LineBreakMode.WordWrap
};
var turnOnLabel3 = new Label
{
Text = AppResources.AutofillTurnOn3,
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Start,
HorizontalTextAlignment = TextAlignment.Start,
LineBreakMode = LineBreakMode.WordWrap
};
var turnOnLabel4 = new Label
{
Text = AppResources.AutofillTurnOn4,
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Start,
HorizontalTextAlignment = TextAlignment.Start,
LineBreakMode = LineBreakMode.WordWrap
};
var turnOnLabel5 = new Label
{
Text = AppResources.AutofillTurnOn5,
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Start,
HorizontalTextAlignment = TextAlignment.Start,
LineBreakMode = LineBreakMode.WordWrap
};
var keyboardImge = new CachedImage
{
Source = "autofill-kb.png",
VerticalOptions = LayoutOptions.CenterAndExpand,
HorizontalOptions = LayoutOptions.Center,
Margin = new Thickness(0, 10, 0, 0),
WidthRequest = 290,
HeightRequest = 252
};
var stackLayout = new StackLayout
{
Orientation = StackOrientation.Vertical,
Spacing = 5,
Padding = new Thickness(20, 20, 20, 30),
Children = { getAccessLabel, turnOnLabel, turnOnLabel1, turnOnLabel2,
turnOnLabel3, turnOnLabel4, turnOnLabel5, keyboardImge },
VerticalOptions = LayoutOptions.FillAndExpand
};
if(Device.RuntimePlatform == Device.iOS)
{
ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Close));
}
Title = AppResources.PasswordAutofill;
Content = new ScrollView { Content = stackLayout };
}
}
}

View File

@@ -41,9 +41,18 @@ namespace Bit.App.Pages
if(Device.RuntimePlatform == Device.iOS)
{
ExtensionCell = new ToolsViewCell(AppResources.BitwardenAppExtension,
AppResources.BitwardenAppExtensionDescription, "upload.png");
section.Add(ExtensionCell);
if(_deviceInfoService.Version < 12)
{
ExtensionCell = new ToolsViewCell(AppResources.BitwardenAppExtension,
AppResources.BitwardenAppExtensionDescription, "upload.png");
section.Add(ExtensionCell);
}
else
{
ExtensionCell = new ToolsViewCell(AppResources.PasswordAutofill,
AppResources.BitwardenAutofillDescription, "magic.png");
section.Add(ExtensionCell);
}
}
if(Device.RuntimePlatform == Device.Android)
{
@@ -152,13 +161,28 @@ namespace Bit.App.Pages
private void ExtensionCell_Tapped(object sender, EventArgs e)
{
Navigation.PushModalAsync(new ExtendedNavigationPage(new ToolsExtensionPage()));
if(_deviceInfoService.Version < 12)
{
Navigation.PushModalAsync(new ExtendedNavigationPage(new ToolsExtensionPage()));
}
else
{
Navigation.PushModalAsync(new ExtendedNavigationPage(new ToolsAutofillPage()));
}
}
private void WebCell_Tapped(object sender, EventArgs e)
{
_googleAnalyticsService.TrackAppEvent("OpenedTool", "Web");
Device.OpenUri(new Uri("https://vault.bitwarden.com"));
var appSettings = Resolver.Resolve<IAppSettingsService>();
if(!string.IsNullOrWhiteSpace(appSettings.BaseUrl))
{
Device.OpenUri(new Uri(appSettings.BaseUrl));
}
else
{
Device.OpenUri(new Uri("https://vault.bitwarden.com"));
}
}
private void ShareCell_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();
@@ -249,8 +245,16 @@ namespace Bit.App.Pages
_settings.AddOrUpdateValue(AddedLoginAlertKey, true);
if(Device.RuntimePlatform == Device.iOS)
{
DisplayAlert(AppResources.BitwardenAppExtension, AppResources.BitwardenAppExtensionAlert,
AppResources.Ok);
if(_deviceInfo.Version < 12)
{
DisplayAlert(AppResources.BitwardenAppExtension, AppResources.BitwardenAppExtensionAlert,
AppResources.Ok);
}
else
{
DisplayAlert(AppResources.PasswordAutofill, AppResources.BitwardenAutofillAlert,
AppResources.Ok);
}
}
else if(Device.RuntimePlatform == Device.Android && !_appInfoService.AutofillAccessibilityServiceEnabled)
{

View File

@@ -19,7 +19,6 @@ namespace Bit.App.Pages
private readonly IConnectivity _connectivity;
private readonly IDeviceActionService _deviceActionService;
private readonly IGoogleAnalyticsService _googleAnalyticsService;
private readonly ITokenService _tokenService;
private readonly ICryptoService _cryptoService;
private readonly string _cipherId;
private Cipher _cipher;
@@ -35,7 +34,6 @@ namespace Bit.App.Pages
_connectivity = Resolver.Resolve<IConnectivity>();
_deviceActionService = Resolver.Resolve<IDeviceActionService>();
_googleAnalyticsService = Resolver.Resolve<IGoogleAnalyticsService>();
_tokenService = Resolver.Resolve<ITokenService>();
_cryptoService = Resolver.Resolve<ICryptoService>();
Init();
@@ -210,7 +208,7 @@ namespace Bit.App.Pages
ToolbarItems.RemoveAt(0);
}
if(_cipher != null && (_tokenService.TokenPremium || _cipher.OrganizationId != null))
if(_cipher != null && (Helpers.CanAccessPremium() || _cipher.OrganizationId != null))
{
ToolbarItems.Add(SaveToolbarItem);
ListView.Footer = NewTable;

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));
}
}
@@ -415,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
@@ -492,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:
@@ -503,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:
@@ -639,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);
@@ -667,11 +700,6 @@ namespace Bit.App.Pages
protected override void OnAppearing()
{
base.OnAppearing();
if(!_connectivity.IsConnected)
{
AlertNoConnection();
}
NameCell?.InitEvents();
NotesCell?.InitEvents();
FolderCell?.InitEvents();
@@ -719,7 +747,7 @@ namespace Bit.App.Pages
CardExpYearCell?.InitEvents();
CardNameCell?.InitEvents();
CardNumberCell?.InitEvents();
if (CardCodeCell?.Button1 != null)
if(CardCodeCell?.Button1 != null)
{
CardCodeCell.Button1.Clicked += CardCodeButton_Clicked;
}
@@ -803,7 +831,7 @@ namespace Bit.App.Pages
CardExpYearCell?.Dispose();
CardNameCell?.Dispose();
CardNumberCell?.Dispose();
if (CardCodeCell?.Button1 != null)
if(CardCodeCell?.Button1 != null)
{
CardCodeCell.Button1.Clicked -= CardCodeButton_Clicked;
}
@@ -831,7 +859,7 @@ namespace Bit.App.Pages
default:
break;
}
Helpers.DisposeSectionEvents(FieldsSection);
Helpers.DisposeSectionEvents(UrisSection);
}

View File

@@ -20,7 +20,6 @@ namespace Bit.App.Pages
private readonly string _cipherId;
private readonly ICipherService _cipherService;
private readonly IDeviceActionService _deviceActionService;
private readonly ITokenService _tokenService;
private DateTime? _timerStarted = null;
private TimeSpan _timerMaxLength = TimeSpan.FromMinutes(5);
@@ -30,7 +29,6 @@ namespace Bit.App.Pages
_cipherId = cipherId;
_cipherService = Resolver.Resolve<ICipherService>();
_deviceActionService = Resolver.Resolve<IDeviceActionService>();
_tokenService = Resolver.Resolve<ITokenService>();
Init();
}
@@ -43,6 +41,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 +50,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 +111,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 +156,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);
@@ -235,6 +245,11 @@ namespace Bit.App.Pages
NotesCell
};
OtherSection = new TableSection(Helpers.GetEmptyTableSectionTitle())
{
revisionDateCell
};
Table = new ExtendedTableView
{
Intent = TableIntent.Settings,
@@ -346,7 +361,7 @@ namespace Bit.App.Pages
{
Table.Root.Remove(AttachmentsSection);
}
if(Model.ShowAttachments && (_tokenService.TokenPremium || cipher.OrganizationId != null))
if(Model.ShowAttachments && (Helpers.CanAccessPremium() || cipher.OrganizationId != null))
{
AttachmentsSection = new TableSection(AppResources.Attachments);
AttachmentCells = new List<AttachmentViewCell>();
@@ -363,10 +378,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);
@@ -374,15 +405,16 @@ namespace Bit.App.Pages
{
ItemInformationSection.Remove(LoginTotpCodeCell);
}
if(cipher.Login?.Totp != null && (_tokenService.TokenPremium || cipher.OrganizationUseTotp))
if(cipher.Login?.Totp != null && (Helpers.CanAccessPremium() || cipher.OrganizationUseTotp))
{
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), () =>
{
@@ -391,7 +423,7 @@ namespace Bit.App.Pages
return false;
}
TotpTick(totpKey);
TotpTick(totpKey, otpParams.Period);
return true;
});
@@ -448,7 +480,7 @@ namespace Bit.App.Pages
private async Task OpenAttachmentAsync(Cipher cipher, VaultViewCipherPageModel.Attachment attachment)
{
if(!_tokenService.TokenPremium && !cipher.OrganizationUseTotp)
if(!Helpers.CanAccessPremium() && !cipher.OrganizationUseTotp)
{
await DisplayAlert(null, AppResources.PremiumRequired, AppResources.Ok);
return;
@@ -469,7 +501,8 @@ namespace Bit.App.Pages
}
await _deviceActionService.ShowLoadingAsync(AppResources.Downloading);
var data = await _cipherService.DownloadAndDecryptAttachmentAsync(attachment.Url, cipher.OrganizationId);
var data = await _cipherService.DownloadAndDecryptAttachmentAsync(attachment.Url, attachment.Key,
cipher.OrganizationId);
await _deviceActionService.HideLoadingAsync();
if(data == null)
@@ -496,11 +529,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

@@ -20,6 +20,40 @@ namespace Bit.App.Repositories
protected override string ApiRoute => "/accounts";
public virtual async Task<ApiResult<PreloginResponse>> PostPreloginAsync(PreloginRequest requestObj)
{
if(!Connectivity.IsConnected)
{
return HandledNotConnected<PreloginResponse>();
}
using(var client = HttpService.ApiClient)
{
var requestMessage = new TokenHttpRequestMessage(requestObj)
{
Method = HttpMethod.Post,
RequestUri = new Uri(string.Concat(client.BaseAddress, ApiRoute, "/prelogin")),
};
try
{
var response = await client.SendAsync(requestMessage).ConfigureAwait(false);
if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync<PreloginResponse>(response).ConfigureAwait(false);
}
var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
var responseObj = JsonConvert.DeserializeObject<PreloginResponse>(responseContent);
return ApiResult<PreloginResponse>.Success(responseObj, response.StatusCode);
}
catch
{
return HandledWebException<PreloginResponse>();
}
}
}
public virtual async Task<ApiResult> PostRegisterAsync(RegisterRequest requestObj)
{
if(!Connectivity.IsConnected)

View File

@@ -21,7 +21,7 @@ namespace Bit.App.Repositories
protected override string ApiRoute => "/ciphers";
public virtual async Task<ApiResult<CipherResponse>> PostAttachmentAsync(string cipherId, byte[] data,
string fileName)
string key, string fileName)
{
if(!Connectivity.IsConnected)
{
@@ -37,6 +37,7 @@ namespace Bit.App.Repositories
using(var client = HttpService.ApiClient)
using(var content = new MultipartFormDataContent("--BWMobileFormBoundary" + DateTime.UtcNow.Ticks))
{
content.Add(new StringContent(key), "key");
content.Add(new StreamContent(new MemoryStream(data)), "data", fileName);
var requestMessage = new TokenHttpRequestMessage

View File

@@ -312,6 +312,15 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to AutoFill Activated!.
/// </summary>
public static string AutofillActivated {
get {
return ResourceManager.GetString("AutofillActivated", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Always Scan.
/// </summary>
@@ -402,6 +411,78 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Your logins are now easily accessable right from your keyboard while logging into apps and websites..
/// </summary>
public static string AutofillSetup {
get {
return ResourceManager.GetString("AutofillSetup", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to We recommend disabling any other AutoFill apps under Settings if you do not plan to use them..
/// </summary>
public static string AutofillSetup2 {
get {
return ResourceManager.GetString("AutofillSetup2", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to To enable password autofill on your device, follow these instructions:.
/// </summary>
public static string AutofillTurnOn {
get {
return ResourceManager.GetString("AutofillTurnOn", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 1. Go to the iOS &quot;Settings&quot; app.
/// </summary>
public static string AutofillTurnOn1 {
get {
return ResourceManager.GetString("AutofillTurnOn1", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 2. Tap &quot;Passwords &amp; Accounts&quot;.
/// </summary>
public static string AutofillTurnOn2 {
get {
return ResourceManager.GetString("AutofillTurnOn2", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 3. Tap &quot;AutoFill Passwords&quot;.
/// </summary>
public static string AutofillTurnOn3 {
get {
return ResourceManager.GetString("AutofillTurnOn3", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 4. Turn on AutoFill.
/// </summary>
public static string AutofillTurnOn4 {
get {
return ResourceManager.GetString("AutofillTurnOn4", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 5. Select &quot;Bitwarden&quot;.
/// </summary>
public static string AutofillTurnOn5 {
get {
return ResourceManager.GetString("AutofillTurnOn5", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Auto-fill with Bitwarden.
/// </summary>
@@ -501,6 +582,24 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the &quot;Tools&quot; screen..
/// </summary>
public static string BitwardenAutofillAlert {
get {
return ResourceManager.GetString("BitwardenAutofillAlert", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Access your vault directly from your keyboard to quickly autofill passwords..
/// </summary>
public static string BitwardenAutofillDescription {
get {
return ResourceManager.GetString("BitwardenAutofillDescription", 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>
@@ -942,6 +1041,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>
@@ -2157,6 +2274,15 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to You must log into the main Bitwarden app before you can use AutoFill..
/// </summary>
public static string MustLogInMainAppAutofill {
get {
return ResourceManager.GetString("MustLogInMainAppAutofill", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to My Vault.
/// </summary>
@@ -2284,7 +2410,7 @@ namespace Bit.App.Resources {
}
/// <summary>
/// Looks up a localized string similar to There are no items in your vault for this website. Tap to add one..
/// Looks up a localized string similar to There are no items in your vault for this website/app. Tap to add one..
/// </summary>
public static string NoItemsTap {
get {
@@ -2418,6 +2544,15 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Password AutoFill.
/// </summary>
public static string PasswordAutofill {
get {
return ResourceManager.GetString("PasswordAutofill", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Password generated..
/// </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>
@@ -1305,4 +1305,51 @@
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>AutoFill Activated!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>You must log into the main Bitwarden app before you can use AutoFill.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Your logins are now easily accessable right from your keyboard while logging into apps and websites.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>We recommend disabling any other AutoFill apps under Settings if you do not plan to use them.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Access your vault directly from your keyboard to quickly autofill passwords.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>To enable password autofill on your device, follow these instructions:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Go to the iOS "Settings" app</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Tap "Passwords &amp; Accounts"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Tap "AutoFill Passwords"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Turn on AutoFill</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Select "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Password AutoFill</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the "Tools" screen.</value>
</data>
</root>

View File

@@ -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í nápovědy, novinek, nebo návody 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>
@@ -403,10 +403,10 @@
<value>Rozšíření aplikace</value>
</data>
<data name="AutofillAccessibilityDescription" xml:space="preserve">
<value>Použijte službu usnadnění pro automatické vyplní přihlašovacích údajů v aplikacích a na webových stránkách.</value>
<value>Služba přístupnosti Bitwarden umožňuje automatické vyplňování přihlašovacích údajů v aplikacích a na webových stránkách.</value>
</data>
<data name="AutofillService" xml:space="preserve">
<value>Služba automatického vyplní</value>
<value>Služba automatického vyplňování</value>
</data>
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
<value>Nepoužít zaměnitelné znaky</value>
@@ -415,7 +415,7 @@
<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í aplikace 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. Další informace o použití tohoto rozšíření naleznete 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>
@@ -424,13 +424,13 @@
<value>Služba automatického vyplňování</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription" xml:space="preserve">
<value>Použijte službu usnadnění pro automatické vyplní přihlašovacích údajů.</value>
<value>Použijte službu přístupnosti pro automatické vyplňová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>
@@ -504,7 +504,7 @@
<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>
@@ -516,7 +516,7 @@
<value>Vygenerovat heslo</value>
</data>
<data name="GetPasswordHint" xml:space="preserve">
<value>Získat nápovědu pro hlavní heslo</value>
<value>Zaslat nápovědu k hlavnímu heslu</value>
</data>
<data name="ImportItems" xml:space="preserve">
<value>Importovat položky</value>
@@ -634,7 +634,7 @@
<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>
@@ -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>
@@ -762,10 +762,10 @@
<value>Klikněte pro automatické vyplnění přihlašovacích údajů.</value>
</data>
<data name="BitwardenAutofillServiceOpenAccessibilitySettings" xml:space="preserve">
<value>Otevřít nastavení usnadnění</value>
<value>Otevřít nastavení přístupnosti</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 nastavení Přístupnosti systému Android klepněte na „Bitwarden“ v části „Stažené 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. Další informace o použití této služby naleznete 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>Znovu zaslat ověřovací kód na e-mail</value>
<comment>For 2FA</comment>
</data>
<data name="TwoStepLoginOptions" xml:space="preserve">
@@ -875,11 +875,11 @@
<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">
@@ -887,7 +887,7 @@
</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">
@@ -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>
@@ -1192,13 +1192,13 @@
<value>V této složce nejsou žádné položky.</value>
</data>
<data name="AutofillAccessibilityService" xml:space="preserve">
<value>Služba automatického vyplňování</value>
<value>Služba přístupnosti</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í přihlašovacích údajům, karet nebo identit v ostatních aplikacích.</value>
<value>Použijte službu přístupnosti pro automatické vyplňování přihlašovacích údajů, platebních karet či identit v ostatních aplikacích.</value>
</data>
<data name="BitwardenAutofillServiceOpenAutofillSettings" xml:space="preserve">
<value>Otevřít nastavení automatického vyplňování</value>
@@ -1226,7 +1226,7 @@
<value>Windows Hello</value>
</data>
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
<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>
<value>Obrazovku nastavení automatického vyplňování Android se nepodařilo otevřít. Nastavení můžete otevřít ručně z Nastavení systému Android &gt; Systém &gt; Jazyky a zadávání &gt; Rozšířená nastavení &gt; Služba automatického vyplňování.</value>
</data>
<data name="CustomFieldName" xml:space="preserve">
<value>Název vlastního pole</value>
@@ -1284,25 +1284,72 @@
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
<value>Ano a uložit</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
<value>Automaticky vyplněno a uloženo.</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<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>Hold your Yubikey near the top of the device.</value>
<value>Držte Yubikey v horní části zařízení.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
<value>Zkusit znovu</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
<value>Pro pokračování přidržte YubiKey NEO u zadní části zařízení.</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>
<value>Služba přístupnosti 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>
<data name="AutofillActivated" xml:space="preserve">
<value>Automatické vyplňování zapnuto.</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>Před použitím automatického vyplňování se musíte nejdříve přihlásit v hlavní aplikaci Bitwarden.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Vaše přihlašovací údaje jsou nyní snadno přístupné přímo z vaší klávesnice během přihlašování do aplikací či webů.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>Doporučujeme vypnout v nastavení všechny další aplikace pro automatické vyplňování údajů, pokud je neplánujete používat.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Přistupujte k vašemu trezoru přímo z vaší klávesnice pro rychlejší automatické vyplnění hesel.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>Pokyny pro zapnutí automatického vyplňování hesel na vašem zařízení:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Přejděte do aplikace „Nastavení“ v iOS</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Klepněte na „Hesla a účty“</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Klepněte na „Automatické vyplňování hesel“</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Zapněte automatické vyplňování</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Vyberte „Bitwarden“</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Automatické vyplnění hesel</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>Nejjednodušší způsob, jak přidat nové přihlašovací údaje do vašeho trezoru, je rozšíření automatického vyplňování Bitwarden. Další informace o použití tohoto rozšíření naleznete na obrazovce „Nástroje“.</value>
</data>
</root>

View File

@@ -144,19 +144,19 @@
<comment>App name. Shouldn't ever change.</comment>
</data>
<data name="Cancel" xml:space="preserve">
<value>Annuller</value>
<value>Annullér</value>
<comment>Cancel an operation.</comment>
</data>
<data name="Copy" xml:space="preserve">
<value>Kopier</value>
<value>Kopiér</value>
<comment>Copy some value to your clipboard.</comment>
</data>
<data name="CopyPassword" xml:space="preserve">
<value>Kopier adgangskode</value>
<value>Kopiér adgangskode</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>Kopier brugernavn</value>
<value>Kopiér brugernavn</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">
@@ -179,21 +179,21 @@
<value>Redigér</value>
</data>
<data name="EditFolder" xml:space="preserve">
<value>Rediger mappe</value>
<value>Redigér mappe</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>Emailadresse</value>
<value>E-mailadresse</value>
<comment>Full label for a email address.</comment>
</data>
<data name="EmailUs" xml:space="preserve">
<value>Email os</value>
<value>E-mail os</value>
</data>
<data name="EmailUsDescription" xml:space="preserve">
<value>Email os direkte for at få hjælp eller give feedback.</value>
<value>E-mail os direkte for at få hjælp eller give feedback.</value>
</data>
<data name="EnterPIN" xml:space="preserve">
<value>Indtast din PIN-kode.</value>
@@ -206,10 +206,10 @@
<value>Indsend en fejlrapport</value>
</data>
<data name="FileBugReportDescription" xml:space="preserve">
<value>Åbn et problem på vores GitHub depot.</value>
<value>Opret en supportsag i vores GitHub-arkiv.</value>
</data>
<data name="FingerprintDirection" xml:space="preserve">
<value>Brug dit fingeraftryk til at verificere.</value>
<value>Verificér med dit fingeraftryk.</value>
</data>
<data name="Folder" xml:space="preserve">
<value>Mappe</value>
@@ -243,7 +243,7 @@
<comment>Hide a secret value that is currently shown (password).</comment>
</data>
<data name="InternetConnectionRequiredMessage" xml:space="preserve">
<value>Forbind venligst til internettet før du fortsætter.</value>
<value>Opret forbindelse til internettet inden du fortsætter.</value>
<comment>Description message for the alert when internet connection is required to continue.</comment>
</data>
<data name="InternetConnectionRequiredTitle" xml:space="preserve">
@@ -269,18 +269,18 @@
<comment>Title for login page. (noun)</comment>
</data>
<data name="LogOut" xml:space="preserve">
<value>Log af</value>
<value>Log ud</value>
<comment>The log out button text (verb).</comment>
</data>
<data name="LogoutConfirmation" xml:space="preserve">
<value>Er du sikker på, at du vil logge af?</value>
<value>Er du sikker på, at du vil logge ud?</value>
</data>
<data name="MasterPassword" xml:space="preserve">
<value>Hovedadgangskode</value>
<comment>Label for a master password.</comment>
</data>
<data name="More" xml:space="preserve">
<value>Mere</value>
<value>Flere</value>
<comment>Text to define that there are more options things to see.</comment>
</data>
<data name="MyVault" xml:space="preserve">
@@ -303,7 +303,7 @@
<comment>Acknowledgement.</comment>
</data>
<data name="DisableGA" xml:space="preserve">
<value>Deaktiver Analytics</value>
<value>Deaktivér Analytics</value>
</data>
<data name="Password" xml:space="preserve">
<value>Adgangskode</value>
@@ -333,7 +333,7 @@
<value>Indsend</value>
</data>
<data name="Sync" xml:space="preserve">
<value>Synkroniser</value>
<value>Synkronisér</value>
<comment>The title for the sync page.</comment>
</data>
<data name="ThankYou" xml:space="preserve">
@@ -348,14 +348,14 @@
<comment>Label for a uri/url.</comment>
</data>
<data name="UseFingerprintToUnlock" xml:space="preserve">
<value>Brug fingeraftryk til at låse op</value>
<value>Benyt fingeraftryk til oplåsning</value>
</data>
<data name="Username" xml:space="preserve">
<value>Brugernavn</value>
<comment>Label for a username.</comment>
</data>
<data name="ValidationFieldRequired" xml:space="preserve">
<value>Feltet {0} er påkrævet.</value>
<value>Feltet {0} er obligatorisk.</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">
@@ -363,10 +363,10 @@
<comment>Confirmation message after suceessfully copying a value to the clipboard.</comment>
</data>
<data name="VerifyFingerprint" xml:space="preserve">
<value>Verificer fingeraftryk</value>
<value>Verificér fingeraftryk</value>
</data>
<data name="VerifyMasterPassword" xml:space="preserve">
<value>Bekræft hovedadgangskode</value>
<value>Verificér hovedadgangskode</value>
</data>
<data name="VerifyPIN" xml:space="preserve">
<value>Bekræft PIN-kode</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 email og/eller lære mere om hvordan du bruger Bitwarden.</value>
<value>Besøg vores hjemmeside for at få hjælp, nyheder, e-maile os og/eller mere at vide om, hvordan du benytter Bitwarden.</value>
</data>
<data name="Website" xml:space="preserve">
<value>Hjemmeside</value>
@@ -397,46 +397,46 @@
<value>Din nye konto er oprettet! Du kan nu logge ind.</value>
</data>
<data name="AddAnItem" xml:space="preserve">
<value>Tilføj element</value>
<value>Tilføj et element</value>
</data>
<data name="AppExtension" xml:space="preserve">
<value>App udvidelse</value>
<value>App-udvidelse</value>
</data>
<data name="AutofillAccessibilityDescription" xml:space="preserve">
<value>Brug Bitwardens hjælpefunktion til at auto-udfylde dine logins på tværs af apps og web.</value>
<value>Brug Bitwardens hjælpefunktion til autoudfyldning af dine logins på tværs af apps og nettet.</value>
</data>
<data name="AutofillService" xml:space="preserve">
<value>Auto-udfyld tjeneste</value>
<value>Autoudfyldningstjeneste</value>
</data>
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
<value>Undgå tvetydige tegn</value>
</data>
<data name="BitwardenAppExtension" xml:space="preserve">
<value>Bitwarden app udvidelse</value>
<value>Bitwarden app-udvidelse</value>
</data>
<data name="BitwardenAppExtensionAlert" xml:space="preserve">
<value>Den nemmeste måde at tilføje nye logins til din boks er fra Bitwarden app udvidelse. Lær mere om brugen af Bitwarden app udvidelsen ved at navigere til skærmbilledet "Værktøjer".</value>
<value>Den letteste måde at tilføje nye logins til din boks er fra Bitwarden app-udvidelsen. mere at vide om brugen af Bitwarden app-udvidelsen ved at til skærmen "Værktøjer".</value>
</data>
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
<value>Brug Bitwarden i Safari og andre apps til at auto-udfylde dine logins.</value>
<value>Benyt Bitwarden i Safari og andre apps til autoudfyldelse af dine logins.</value>
</data>
<data name="BitwardenAutofillService" xml:space="preserve">
<value>Bitwarden auto-udfyld tjeneste</value>
<value>Bitwarden autoudfyldningstjeneste</value>
</data>
<data name="BitwardenAutofillAccessibilityServiceDescription" xml:space="preserve">
<value>Brug Bitwardens hjælpefunktion til at auto-udfylde dine logins.</value>
<value>Benyt Bitwardens hjælpefunktion til autoudfyldning af dine logins.</value>
</data>
<data name="ChangeEmail" xml:space="preserve">
<value>Skift emailadresse</value>
<value>Skift e-mail</value>
</data>
<data name="ChangeEmailConfirmation" xml:space="preserve">
<value>Du kan ændre din emailadresse i bitwarden.com web-boksen. Vil du besøge hjemmesiden nu?</value>
<value>Du kan skifte din e-mailadresse i bitwarden.com web-boksen. Vil du besøge hjemmesiden nu?</value>
</data>
<data name="ChangeMasterPassword" xml:space="preserve">
<value>Skift hovedadgangskode</value>
</data>
<data name="ChangePasswordConfirmation" xml:space="preserve">
<value>Du kan ændre din hovedadgangskode i bitwarden.com web-boksen. Vil du besøge hjemmesiden nu?</value>
<value>Du kan skifte din hovedadgangskode i bitwarden.com web-boksen. Vil du besøge hjemmesiden nu?</value>
</data>
<data name="Close" xml:space="preserve">
<value>Luk</value>
@@ -464,25 +464,25 @@
<comment>Message shown when interacting with the server</comment>
</data>
<data name="EditItem" xml:space="preserve">
<value>Rediger element</value>
<value>Redigér element</value>
</data>
<data name="EnableAutomaticSyncing" xml:space="preserve">
<value>Aktiver automatisk synkronisering</value>
<value>Aktivér automatisk synkronisering</value>
</data>
<data name="EnterEmailForHint" xml:space="preserve">
<value>Indtast din kontos emailadresse for at modtage dit hovedadgangskodetip.</value>
<value>Angiv din kontos e-mailadresse for at modtage dit hovedadgangskodetip.</value>
</data>
<data name="ExntesionReenable" xml:space="preserve">
<value>Genaktiver app udvidelse</value>
<value>Genaktivér app-udvidelse</value>
</data>
<data name="ExtensionAlmostDone" xml:space="preserve">
<value>Næsten færdig!</value>
</data>
<data name="ExtensionEnable" xml:space="preserve">
<value>Aktiver app udvidelse</value>
<value>Aktivér app-udvidelse</value>
</data>
<data name="ExtensionInSafari" xml:space="preserve">
<value>I Safari, find Bitwarden ved hjælp af ikonet del (tip: rul til højre på den nederste række i menuen).</value>
<value>I Safari, find Bitwarden ved hjælp af delingsikonet (tip: Rul til højre på den nederste række i menuen).</value>
<comment>Safari is the name of apple's web browser</comment>
</data>
<data name="ExtensionInstantAccess" xml:space="preserve">
@@ -495,16 +495,16 @@
<value>Se understøttede apps</value>
</data>
<data name="ExtensionSetup" xml:space="preserve">
<value>Dine logins er nu let tilgængelige fra Safari, Chrome og andre understøttede apps.</value>
<value>Dine logins er nu lettilgængelige fra Safari, Chrome og andre understøttede apps.</value>
</data>
<data name="ExtensionSetup2" xml:space="preserve">
<value>I Safari og Chrome, find Bitwarden ved hjælp af ikonet del (tip: rul til højre på den nederste række i delemenuen).</value>
<value>I Safari og Chrome, find Bitwarden ved hjælp af delingsikonet (tip: Rul til højre på den nederste række i delingsmenuen).</value>
</data>
<data name="ExtensionTapIcon" xml:space="preserve">
<value>Tryk på Bitwarden-ikonet i menuen for at starte udvidelsen.</value>
</data>
<data name="ExtensionTurnOn" xml:space="preserve">
<value>For at aktivere Bitwarden i Safari og andre apps, tryk på "mere" ikonet på den nederste række i menuen.</value>
<value>For at aktivere Bitwarden i Safari og andre apps trykkes på "mere"-ikonet på den nederste række i menuen.</value>
</data>
<data name="Favorite" xml:space="preserve">
<value>Favorit</value>
@@ -513,22 +513,22 @@
<value>fingeraftryk</value>
</data>
<data name="GeneratePassword" xml:space="preserve">
<value>Generer adgangskode</value>
<value>Generér adgangskode</value>
</data>
<data name="GetPasswordHint" xml:space="preserve">
<value>Få dit hovedadgangskodetip</value>
</data>
<data name="ImportItems" xml:space="preserve">
<value>Importer elementer</value>
<value>Importér elementer</value>
</data>
<data name="ImportItemsConfirmation" xml:space="preserve">
<value>Du kan importere elementer i din web-boks på bitwarden.com. Vil du besøge hjemmesiden nu?</value>
<value>Du kan masseimportere 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>
<value>Masseimportér hurtigt dine elementer fra andre adgangskodehåndterings-apps.</value>
</data>
<data name="LastSync" xml:space="preserve">
<value>Sidste synkronisering:</value>
<value>Seneste synkronisering:</value>
</data>
<data name="Length" xml:space="preserve">
<value>Længde</value>
@@ -559,25 +559,25 @@
<comment>Message shown when interacting with the server</comment>
</data>
<data name="LoginOrCreateNewAccount" xml:space="preserve">
<value>Log ind eller opret en ny konto for at få adgang til din sikre boks.</value>
<value>Log ind, eller opret en ny konto, for at til din sikre boks.</value>
</data>
<data name="Manage" xml:space="preserve">
<value>Administrer</value>
<value>Håndtér</value>
</data>
<data name="MasterPasswordConfirmationValMessage" xml:space="preserve">
<value>Din adgangskode matchede ikke.</value>
<value>Adgangskodebekræftelse er forkert.</value>
</data>
<data name="MasterPasswordDescription" xml:space="preserve">
<value>Hovedadgangskoden er den adgangskode, du bruger til at få adgang til din boks. Det er meget vigtigt, at du ikke glemmer din hovedadgangskode. Der er ingen måde hvorpå koden kan genoprettes, i tilfælde af at du glemmer den.</value>
<value>Hovedadgangskoden er den adgangskode, du benytter for at til din boks. Det er meget vigtigt, at du ikke glemmer din hovedadgangskode. Der er ingen måde, hvorpå koden kan genoprettes, dersom du glemmer den.</value>
</data>
<data name="MasterPasswordHint" xml:space="preserve">
<value>Hovedadgangskode tip (valgfri)</value>
<value>Hovedadgangskodetip (valgfrit)</value>
</data>
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Et tip til hovedeadgangskoden kan hjælpe dig med at huske din adgangskode, hvis du glemmer den.</value>
<value>Et hovedeadgangskodentip kan hjælpe dig med at huske din adgangskode, hvis du glemmer den.</value>
</data>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Hovedadgangskode skal være mindst 8 tegn.</value>
<value>Hovedadgangskode skal være på minimum 8 tegn.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Minimum cifre</value>
@@ -591,7 +591,7 @@
<value>Flere indstillinger</value>
</data>
<data name="MustLogInMainApp" xml:space="preserve">
<value>Du skal logge ind på den primære Bitwarden app før du kan bruge udvidelsen.</value>
<value>Du skal logge ind på den primære Bitwarden-app, før du kan benytte udvidelsen.</value>
</data>
<data name="Never" xml:space="preserve">
<value>Aldrig</value>
@@ -606,17 +606,17 @@
<value>Der er ingen elementer i din boks.</value>
</data>
<data name="NoItemsTap" xml:space="preserve">
<value>Der er ingen elementer i din boks til denne hjemmeside. Tryk for at tilføje et.</value>
<value>Der er ingen elementer til denne hjemmeside/app i din boks. Tryk for at tilføje et.</value>
</data>
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
<value>Dette login har ikke et brugernavn eller adgangskode konfigureret.</value>
<value>Dette login har intet brugernavn eller adgangskode opsat.</value>
</data>
<data name="OkGotIt" xml:space="preserve">
<value>Ok, forstået!</value>
<comment>Confirmation, like "Ok, I understand it"</comment>
</data>
<data name="OptionDefaults" xml:space="preserve">
<value>Standardindstillinger er sat fra Bitwarden appens adgangskode generator værktøj.</value>
<value>Standardindstillinger opsættes fra Bitwarden-app'ens adgangskodegeneratorværktøj.</value>
</data>
<data name="Options" xml:space="preserve">
<value>Indstillinger</value>
@@ -634,29 +634,29 @@
<value>Adgangskodetip</value>
</data>
<data name="PasswordHintAlert" xml:space="preserve">
<value>Vi har sendt dig en email med dit hovedadgangskodetip.</value>
<value>Vi har sendt dig en e-mail med dit hovedadgangskodetip.</value>
</data>
<data name="PasswordOverrideAlert" xml:space="preserve">
<value>Er du sikker du vil overskrive den aktuelle adgangskode?</value>
</data>
<data name="PushNotificationAlert" xml:space="preserve">
<value>Bitwarden holder automatisk din boks synkroniseret ved hjælp af push notifikationer. For at få den bedst mulige oplevelse, skal du vælge "Tillad" den følgende prompt for at aktivere push notifikationer.</value>
<value>Bitwarden holder automatisk din boks synkroniseret ved hjælp af push-notifikationer. For den bedst mulige oplevelse bør du vælge "Tillad" i den følgende prompt for at aktivere push-notifikationer.</value>
<comment>Push notifications for apple products</comment>
</data>
<data name="RateTheApp" xml:space="preserve">
<value>Bedøm appen</value>
</data>
<data name="RateTheAppDescription" xml:space="preserve">
<value>Overvej om du vil hjælpe os med en god anmeldelse!</value>
<value>Overvej venligst at hjælpe os med en god anmeldelse!</value>
</data>
<data name="RateTheAppDescriptionAppStore" xml:space="preserve">
<value>App Store bedømmelser nulstilles ved hver ny version af Bitwarden. Overvej om du vil hjælpe os med en god anmeldelse!</value>
<value>App Store-bedømmelser nulstilles ved hver ny version af Bitwarden. Overvej venligst at hjælpe os med en god anmeldelse!</value>
</data>
<data name="RegeneratePassword" xml:space="preserve">
<value>Regenerer adgangskode</value>
<value>Regenerér adgangskode</value>
</data>
<data name="RetypeMasterPassword" xml:space="preserve">
<value>Gentast hovedadgangskode</value>
<value>Angiv hovedadgangskode igen</value>
</data>
<data name="SearchVault" xml:space="preserve">
<value>Søg i boks</value>
@@ -665,7 +665,7 @@
<value>Sikkerhed</value>
</data>
<data name="SeeDevProgress" xml:space="preserve">
<value>Se fremskridt i udviklingen</value>
<value>Se udviklingsforløb</value>
</data>
<data name="Select" xml:space="preserve">
<value>Vælg</value>
@@ -674,7 +674,7 @@
<value>Sæt PIN-kode</value>
</data>
<data name="SetPINDirection" xml:space="preserve">
<value>Indtast en 4-cifret PIN-kode til at låse appen op med.</value>
<value>Angiv en 4-cifret PIN-kode til at låse appen op med.</value>
</data>
<data name="ItemInformation" xml:space="preserve">
<value>Elementinformation</value>
@@ -691,13 +691,13 @@
<comment>Message shown when interacting with the server</comment>
</data>
<data name="SyncingComplete" xml:space="preserve">
<value>Synkronisering komplet.</value>
<value>Synkronisering fuldført.</value>
</data>
<data name="SyncingFailed" xml:space="preserve">
<value>Synkronisering mislykkedes.</value>
</data>
<data name="SyncVaultNow" xml:space="preserve">
<value>Synkroniser boks nu</value>
<value>Synkronisér boks nu</value>
</data>
<data name="TouchID" xml:space="preserve">
<value>Touch ID</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 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 bitwarden.com web-boksen. Vil du besøge hjemmesiden nu?</value>
<value>To-trins login øger din kontosikkerhed, ved at kræve at du verificerer dit login med en anden enhed, såsom en sikkerhedsnøgle, autentificerings app, SMS, telefonopkald eller e-mail. To-trins login kan aktiveres i 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>
@@ -720,7 +720,7 @@
<comment>Message shown when interacting with the server</comment>
</data>
<data name="VerificationCode" xml:space="preserve">
<value>Bekræftelseskode</value>
<value>Verifikationskode</value>
</data>
<data name="ViewItem" xml:space="preserve">
<value>Vis element</value>
@@ -729,10 +729,10 @@
<value>Bitwarden web-boks</value>
</data>
<data name="WebVaultDescription" xml:space="preserve">
<value>Administrer dine elementer fra enhver webbrowser med Bitwarden web-boksen.</value>
<value>Håndtér dine elementer fra enhver webbrowser med Bitwarden web-boksen.</value>
</data>
<data name="Lost2FAApp" xml:space="preserve">
<value>Mistet autentificerings app?</value>
<value>Mistet autentificerings-app?</value>
</data>
<data name="Items" xml:space="preserve">
<value>Elementer</value>
@@ -756,19 +756,19 @@
<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>Når du ser en Bitwarden auto-udfyld notifikation, kan du trykke på den for at starte automatisk udfyldning.</value>
<value>Når du ser en Bitwarden autoudfyldningsnotifikation, kan du trykke på den for at starte automatisk udfyldning.</value>
</data>
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
<value>Tryk på denne notifikation for at auto-udfylde med et element fra din boks.</value>
<value>Tryk på denne notifikation for at autoudfylde med et element fra din boks.</value>
</data>
<data name="BitwardenAutofillServiceOpenAccessibilitySettings" xml:space="preserve">
<value>Åbn indstillinger for hjælpefunktioner</value>
</data>
<data name="BitwardenAutofillServiceStep1" xml:space="preserve">
<value>1. På Android-skærmen Hjælpefunktioner tryk på "Bitwarden" under tjenester.</value>
<value>1. Tryk fra Androids Hjælpefunktioner på "Bitwarden" under Tjenester-sektionen.</value>
</data>
<data name="BitwardenAutofillServiceStep2" xml:space="preserve">
<value>2. Tænd kontakten og tryk på OK for at acceptere.</value>
<value>2. Slå kontakten til og tryk på OK for at acceptere.</value>
</data>
<data name="Disabled" xml:space="preserve">
<value>Deaktiveret</value>
@@ -783,16 +783,16 @@
<value>Beta</value>
</data>
<data name="BitwardenAutofillServiceAlert" xml:space="preserve">
<value>Den nemmeste måde at tilføje nye logins til din boks er fra Bitwarden Auto-udfyld tjenesten. Lær mere om brugen af Bitwarden auto-udfyld tjenesten ved at navigere til skærmbilledet "Værktøjer".</value>
<value>Den letteste måde at tilføje nye logins til din boks er fra Bitwarden Autoudfyldningstjenesten. mere at vide om brugen af Bitwarden Autoudfyldningstjenesten ved at til skærmen "Værktøjer".</value>
</data>
<data name="Autofill" xml:space="preserve">
<value>Auto-udfyld</value>
<value>Autoudfyld</value>
</data>
<data name="AutofillOrView" xml:space="preserve">
<value>Vil du auto-udfylde eller se dette element?</value>
<value>Vil du autoudfylde eller se dette element?</value>
</data>
<data name="BitwardenAutofillServiceMatchConfirm" xml:space="preserve">
<value>Er du sikker på du vil auto-udfylde dette element? Det er ikke et fuldstændigt match til "{0}".</value>
<value>Er du sikker på du vil autoudfylde dette element? Det er ikke et fuldstændigt match til "{0}".</value>
</data>
<data name="MatchingItems" xml:space="preserve">
<value>Matchende elementer</value>
@@ -804,7 +804,7 @@
<value>Søg</value>
</data>
<data name="BitwardenAutofillServiceSearch" xml:space="preserve">
<value>Du søger efter et auto-udfyld element til "{0}".</value>
<value>Du søger efter et autoudfyld element til "{0}".</value>
</data>
<data name="ShareVault" xml:space="preserve">
<value>Del din boks</value>
@@ -819,19 +819,19 @@
<value>Skan når adgangskodefeltet fokuseres</value>
</data>
<data name="AutofillPasswordFieldDescription" xml:space="preserve">
<value>Skan kun skærmen for felter og tilbyd en auto-udfyld notifikation, når du vælger et adgangskodefelt. Denne indstilling kan hjælpe med at spare på batteriet.</value>
<value>Skan kun skærmen for felter og tilbyd en autoudfyld notifikation, når du vælger et adgangskodefelt. Denne indstilling kan hjælpe med at spare på batteriet.</value>
</data>
<data name="AutofillPersistNotification" xml:space="preserve">
<value>Vedvarende notifikation</value>
</data>
<data name="AutofillPersistNotificationDescription" xml:space="preserve">
<value>Tilbyd altid en auto-udfyld notifikation og skan kun for felter efter forsøgt auto-udfyld. Denne indstilling kan hjælpe med at spare på batteriet.</value>
<value>Tilbyd altid en autoudfyld notifikation og skan kun efter felter efter forsøgt autoudfyld. Denne indstilling kan hjælpe med at spare på batteriet.</value>
</data>
<data name="AutofillAlways" xml:space="preserve">
<value>Skan altid</value>
</data>
<data name="AutofillAlwaysDescription" xml:space="preserve">
<value>Skan altid skærmen for felter og tilbyd kun en auto-udfyld notifikation, hvis adgangskodefelter er fundet. Dette er standardindstillingen.</value>
<value>Skan altid skærmen for felter og tilbyd kun en autoudfyld notifikation, hvis adgangskodefelter er fundet. Dette er standardindstillingen.</value>
</data>
<data name="CannotOpenApp" xml:space="preserve">
<value>Kan ikke åbne appen "{0}".</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>
@@ -941,13 +941,13 @@
<value>TOTP kopieret!</value>
</data>
<data name="CopyTotp" xml:space="preserve">
<value>Kopier TOTP</value>
<value>Kopiér TOTP</value>
</data>
<data name="DisableAutoTotpCopyDescription" xml:space="preserve">
<value>Hvis dit login har en autentificeringsnøgle tilknyttet, kopieres TOTP verifikationskoden automatisk til din udklipsholder når du auto-udfylder login.</value>
</data>
<data name="DisableAutoTotpCopy" xml:space="preserve">
<value>Deaktiver automatisk TOTP kopiering</value>
<value>Deaktivér automatisk TOTP kopiering</value>
</data>
<data name="PremiumRequired" xml:space="preserve">
<value>Premium-medlemskab kræves for at anvende denne funktion.</value>
@@ -1024,10 +1024,10 @@
<value>Brugerdefinerede felter</value>
</data>
<data name="CopyNumber" xml:space="preserve">
<value>Kopier nummer</value>
<value>Kopiér nummer</value>
</data>
<data name="CopySecurityCode" xml:space="preserve">
<value>Kopier sikkerhedskode</value>
<value>Kopiér sikkerhedskode</value>
</data>
<data name="Number" xml:space="preserve">
<value>Nummer</value>
@@ -1174,7 +1174,7 @@
<value>Ikonserver URL</value>
</data>
<data name="AutofillWithBitwarden" xml:space="preserve">
<value>Auto-udfyld med Bitwarden</value>
<value>Autoudfyld med Bitwarden</value>
</data>
<data name="VaultIsLocked" xml:space="preserve">
<value>Boksen er låst</value>
@@ -1192,16 +1192,16 @@
<value>Der er ingen elementer i denne mappe.</value>
</data>
<data name="AutofillAccessibilityService" xml:space="preserve">
<value>Auto-udfyld hjælpefunktion</value>
<value>Autoudfyld 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>
<value>Bitwarden autoudfyld tjenesten bruger Androids AutoFyld framework til at hjælpe med at udfylde logins, kreditkort og identitetsoplysninger i andre apps på din enhed.</value>
</data>
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
<value>Brug Bitwarden auto-udfyld tjenesten til at udfylde logins, kreditkort og identitetsoplysninger i andre apps.</value>
<value>Brug Bitwarden autoudfyld tjenesten til at udfylde logins, kreditkort og identitetsoplysninger i andre apps.</value>
</data>
<data name="BitwardenAutofillServiceOpenAutofillSettings" xml:space="preserve">
<value>Åbn auto-udfyld indstillinger</value>
<value>Åbn autoudfyld indstillinger</value>
</data>
<data name="FaceID" xml:space="preserve">
<value>Face ID</value>
@@ -1287,7 +1287,7 @@
<value>Ja, og gem</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-udfyld og gem</value>
<value>Autoudfyld og gem</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organisation</value>
@@ -1303,6 +1303,53 @@
<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>
<value>Hjælpefunktionen kan være nyttigt at bruge, når apps ikke understøtter den almindelige autoudfyldningstjeneste.</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>
<data name="AutofillActivated" xml:space="preserve">
<value>Autoudfyld aktiveret!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>Du skal logge ind på den primære Bitwarden-app, før du kan bruge Autoudfyld.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Dine logins kan nu nemt tilgås direkte fra dit tastatur, når du logger ind på apps og hjemmesider.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>Vi anbefaler, at du deaktiverer andre Autoudfyld-apps under Indstillinger, hvis du ikke har planer om at bruge dem.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Få adgang til din boks direkte fra dit tastatur for hurtigt at autoudfylde adgangskoder.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>Følg disse instruktioner for at aktivere autoudfyldning af adgangskoder på din enhed:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Åbn iOS-appen "Indstillinger"</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Tryk på "Adgangskoder &amp; konti"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Tryk på "Autoudfyld adgangskoder"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Aktivér Autoudfyld</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Vælg "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Adgangskode Autoudfyld</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>Den letteste måde at tilføje nye logins til din boks er ved at bruge Bitwarden adgangskode Autoudfyld udvidelsen. Få mere at vide om brugen af Bitwarden adgangskode Autoudfyld udvidelsen ved at navigere til skærmbilledet "Værktøjer".</value>
</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>
@@ -1284,10 +1284,10 @@
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Ja und speichern</value>
<value>Ja, und speichern</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Automatisch Ausfüllen und speichern</value>
<value>Automatisch ausfüllen und speichern</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organisation</value>
@@ -1305,4 +1305,51 @@
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>AutoFill aktiviert!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>Du musst dich in der Bitwarden App einloggen, bevor du AutoFill nutzen kannst.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Du kannst nun direkt von der Tastatur auf deine Zugangsdaten zugreifen, wenn du dich auf Webseiten oder in Apps anmeldest.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>Wir empfehlen alle anderen Auto Ausfüllen Apps in den Einstellungen zu deaktivieren wenn du sie nicht nutzt.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Greife auf deinen Tressor direkt von deiner Tastatur aus zu um Passwörter schnell und automatisch auszufüllen.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>Um Autofill auf deinem Gerät zu aktivieren, befolge bitte diese Anweisungen:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Gehe in die iOS Einstellungen</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Drücke "Passwörter &amp; Accounts"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Drücke "AutoFill Passwörter"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Schalte AutoFill ein</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Wähle "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Passwort AutoFill</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>Der einfachste Weg neue Zugangsdaten zum Tresor hinzuzufügen ist die Bitwarden Passwort Autofill Erweiterung. Um mehr über die Bitwarden Passwort Autofill Erweiterung zu erfahren, öffne einfach die "Werkzeuge" Bildschirmseite.</value>
</data>
</root>

View File

@@ -606,7 +606,7 @@
<value>No hay elementos en tu caja fuerte.</value>
</data>
<data name="NoItemsTap" xml:space="preserve">
<value>No hay elementos en tu caja fuerte para este sitio web. Pulsa para añadir uno.</value>
<value>No hay elementos en tu caja fuerte para este sitio web o aplicación. Pulsa para añadir uno.</value>
</data>
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
<value>Esta entrada no tiene usuario y contraseña configurados.</value>
@@ -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>
@@ -1305,4 +1305,51 @@
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>¡Autorellenado activado!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>Debes identificarte en la aplicación principal de Bitwarden antes de poder utilizar Autorellenado.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Tus accesos son ahora fácilmente accesibles desde tu teclado mientras te identificas en aplicaciones y sitios web.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>Te recomendamos deshabilitar cualquier otra aplicación de Autorellenado desde Ajustes si no piensas utilizarlas.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Accede a tu caja fuerte directamente desde tu teclado para autorellenar contraseñas rápidamente.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>Para habilitar el Autorellenado de contraseña en su dispositivo, sigue estas instrucciones:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Ve a la aplicación "Ajustes" de iOS</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Pulsa en "Contraseñas y Cuentas"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Pulsa en "Autorellenado de contraseñas"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Habilita el autorellenado</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Selecciona "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Autorellenado de contraseña</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>La forma más facil de añadir nuevas entradas a tu caja fuerte es usando la extensión de Autorellenado de contraseñas Bitwarden. Aprende más sobre como utilizar la extensión de Autorellenado de contraseñas Bitwarden yendo a la pantalla de Herramientas.</value>
</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>
@@ -1180,7 +1180,7 @@
<value>Hoidla on lukus</value>
</data>
<data name="GoToMyVault" xml:space="preserve">
<value>Mine hoidlasse</value>
<value>Ava hoidla</value>
</data>
<data name="Collections" xml:space="preserve">
<value>Kogumikud</value>
@@ -1305,4 +1305,51 @@
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>Automaattäide on aktiveeritud!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>Pead enne Automaattäite kasutamist Bitwardeni rakendusse sisse logima.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Sinu kontoandmed on otse klaviatuurilt ligipääsetavad. Saad nüüd kergemini äppides ja veebilehtel sisse logida.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>Soovitame teised Automaattäite valikud Seadetest välja lülitada, kui sa neid enam ei kasuta.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Pääse oma hoidlale otse klaviatuurilt ligi ning täida parooliväljad lihtsamini.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>Paroolide automaattäite võimaldamiseks järgi neid juhiseid:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Mine iOS "Settings" rakendusse</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Vajuta "Passwords &amp; Accounts"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Vajuta "AutoFill Passwords"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Lülita AutoFill sisse</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Vali "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Paroolide Automaatne täitmine</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>Kõige lihtsam viis uute kontoandmete sisestamiseks on kasutada Bitwardeni Automaattäite lisatööriista. Rohkem teavet selle kasutamise kohta leiad "Tööriistad" menüüst.</value>
</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">
@@ -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>
@@ -409,7 +409,7 @@
<value>سرویس پر کردن خودکار</value>
</data>
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
<value>از کاراکترهای متقارن استفاده نکن</value>
<value>از تکرار کاراکترهای یک شکل اجتناب کن</value>
</data>
<data name="BitwardenAppExtension" xml:space="preserve">
<value>افزونه اپلیکیشن Bitwarden</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>
@@ -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>
@@ -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>
@@ -1284,25 +1284,72 @@
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
<value>بله، و ذخیره</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
<value>پر کردن خودکار و ذخیره</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<value>سازماندهی</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>
<value>Yubikey خود را در نزدیکی بالای دستگاه نگه دارید.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
<value>دوباره امتحان کنید</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
<value>برای ادامه، دوباره YubiKey NEO خود را پشت دستگاه نگه دارید.</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>
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>AutoFill Activated!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>You must log into the main Bitwarden app before you can use AutoFill.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Your logins are now easily accessable right from your keyboard while logging into apps and websites.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>We recommend disabling any other AutoFill apps under Settings if you do not plan to use them.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Access your vault directly from your keyboard to quickly autofill passwords.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>To enable password autofill on your device, follow these instructions:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Go to the iOS "Settings" app</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Tap "Passwords &amp; Accounts"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Tap "AutoFill Passwords"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Turn on AutoFill</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Select "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Password AutoFill</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the "Tools" screen.</value>
</data>
</root>

View File

@@ -412,7 +412,7 @@
<value>Vältä epäselviä merkkejä</value>
</data>
<data name="BitwardenAppExtension" xml:space="preserve">
<value>bitwardenin sovelluslaajennus</value>
<value>Bitwarden-sovelluslaajennus</value>
</data>
<data name="BitwardenAppExtensionAlert" xml:space="preserve">
<value>Helpoin tapa lisätä uusia kirjautumistietoja holviisi on käyttää bitwardenin sovelluslaajennusta. Lue lisää sovelluslaajennuksesta "Työkalut"-kohdassa.</value>
@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey-todennuslaite</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>Lisää uusi liite</value>
@@ -1290,14 +1290,14 @@
<value>Auto-fill and save</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<value>Organisaatio</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>
<value>Pidä Yubikeytasi lähellä laitteen yläosaa.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
<value>Yritä uudelleen</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
@@ -1305,4 +1305,51 @@
<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>Salasana päivitetty</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Päivitetty</value>
<comment>ex. Date this item was updated</comment>
</data>
<data name="AutofillActivated" xml:space="preserve">
<value>AutoFill Activated!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>You must log into the main Bitwarden app before you can use AutoFill.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Your logins are now easily accessable right from your keyboard while logging into apps and websites.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>We recommend disabling any other AutoFill apps under Settings if you do not plan to use them.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Access your vault directly from your keyboard to quickly autofill passwords.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>To enable password autofill on your device, follow these instructions:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Go to the iOS "Settings" app</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Tap "Passwords &amp; Accounts"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Tap "AutoFill Passwords"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Turn on AutoFill</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Select "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Password AutoFill</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the "Tools" screen.</value>
</data>
</root>

View File

@@ -125,7 +125,7 @@
<comment>Add/create a new entity (verb).</comment>
</data>
<data name="AddFolder" xml:space="preserve">
<value>Ajouter dossier</value>
<value>Ajouter un dossier</value>
</data>
<data name="AddItem" xml:space="preserve">
<value>Ajouter un élément</value>
@@ -580,11 +580,11 @@
<value>Le mot de passe maître doit faire plus de 8 caractères.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Nombres minimums</value>
<value>Nombre minimum de chiffres</value>
<comment>Minimum numeric characters for password generator settings</comment>
</data>
<data name="MinSpecial" xml:space="preserve">
<value>Caractères spéciaux minimums</value>
<value>Nombre minimum de caractères spéciaux</value>
<comment>Minimum special characters for password generator settings</comment>
</data>
<data name="MoreSettings" xml:space="preserve">
@@ -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>
@@ -1284,25 +1284,72 @@
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
<value>Oui et enregistrer</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
<value>Autocomplétion et enregistrer</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<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 your Yubikey near the top of the device.</value>
<value>Gardez votre Yubikey près du haut de l'appareil.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
<value>Réessayez</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
<value>Pour continuer, gardez votre Yubikey NEO à l'arrière de l'appareil.</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>
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>AutoFill Activated!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>You must log into the main Bitwarden app before you can use AutoFill.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Your logins are now easily accessable right from your keyboard while logging into apps and websites.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>We recommend disabling any other AutoFill apps under Settings if you do not plan to use them.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Access your vault directly from your keyboard to quickly autofill passwords.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>To enable password autofill on your device, follow these instructions:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Go to the iOS "Settings" app</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Tap "Passwords &amp; Accounts"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Tap "AutoFill Passwords"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Turn on AutoFill</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Select "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Password AutoFill</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the "Tools" screen.</value>
</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>
@@ -1305,4 +1305,51 @@
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>AutoFill Activated!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>You must log into the main Bitwarden app before you can use AutoFill.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Your logins are now easily accessable right from your keyboard while logging into apps and websites.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>We recommend disabling any other AutoFill apps under Settings if you do not plan to use them.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Access your vault directly from your keyboard to quickly autofill passwords.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>To enable password autofill on your device, follow these instructions:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Go to the iOS "Settings" app</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Tap "Passwords &amp; Accounts"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Tap "AutoFill Passwords"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Turn on AutoFill</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Select "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Password AutoFill</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the "Tools" screen.</value>
</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>
@@ -1284,25 +1284,72 @@
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
<value>Da, i spremi</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
<value>Automatski popuni i spremi</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<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>Hold your Yubikey near the top of the device.</value>
<value>Držite Yubikey blizu vrha uređaja.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
<value>Pokušajte ponovno</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
<value>Da biste nastavili, držite YubiKey NEO na stražnjoj strani uređaja.</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>
<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>Lozinka ažurirana</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Ažurirano</value>
<comment>ex. Date this item was updated</comment>
</data>
<data name="AutofillActivated" xml:space="preserve">
<value>AutoFill Activated!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>You must log into the main Bitwarden app before you can use AutoFill.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Your logins are now easily accessable right from your keyboard while logging into apps and websites.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>We recommend disabling any other AutoFill apps under Settings if you do not plan to use them.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Access your vault directly from your keyboard to quickly autofill passwords.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>To enable password autofill on your device, follow these instructions:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Go to the iOS "Settings" app</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Tap "Passwords &amp; Accounts"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Tap "AutoFill Passwords"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Turn on AutoFill</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Select "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Password AutoFill</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the "Tools" screen.</value>
</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>
@@ -1284,25 +1284,72 @@
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
<value>Igen, és mentés</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
<value>Automatikus kitöltés és mentés</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<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>Hold your Yubikey near the top of the device.</value>
<value>Tartsd lenyomva a Yubikey-t, a készülék tetején.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
<value>Próbáld újra</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
<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>The accessibility service may be helpful to use when apps do not support the standard auto-fill service.</value>
<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>Jelszó frissítve</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Frissítve</value>
<comment>ex. Date this item was updated</comment>
</data>
<data name="AutofillActivated" xml:space="preserve">
<value>Automatikus kitöltés aktiválva!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>Az automatikus kitöltő szolgáltatás használata előtt be kell lépned a fő Bitwarden alkalmazásba.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Az alkalmazásokba és weboldalakra a belépési adatok most már könnyedén elérhető a billentyűzetről.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>Javasoljuk, hogy kapcsolj ki minden más automatikus kitöltő alkalmazást, ha nem használod azokat.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>A széf közvetlenül a billentyűzetről érhető el a jelszavak gyors kitöltéséhez.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>A jelszó automatikus kitöltés szolgáltatás engedélyezéséhez kövesd az alábbi instrukciókat:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Lépj be az iOS "Beállítások" alkalmazásba</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Válaszd a "Jelszavak és Fiókok" lehetőséget</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Válaszd ki az "Jelszavak automatikus kitöltése" lehetőséget</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Kapcsold be az opciót</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Válaszd ki a "Bitwarden"-t</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Jelszó Automatikus kitöltése</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>A legegyszerűbb módja új bejelentkezési adatok hozzáadásának a széfedhez, a bitwarden alkalmazás. Az alkalmazás használatáról az "Eszközök" képernyőn tudhatsz meg többet.</value>
</data>
</root>

View File

@@ -887,7 +887,7 @@
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>Kunci Keamanan 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>Tambah Lampiran Baru</value>
@@ -989,7 +989,7 @@
<value>URL Server API</value>
</data>
<data name="CustomEnvironment" xml:space="preserve">
<value>Custom Environment</value>
<value>Lingkungan Kustom</value>
</data>
<data name="CustomEnvironmentFooter" xml:space="preserve">
<value>Untuk pengguna tingkat lanjutan. Anda dapat menentukan secara mandiri basis dari URL untuk setiap layanan.</value>
@@ -1006,7 +1006,7 @@
<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>Self-hosted Environment</value>
<value>Lingkungan Hos-mandiri</value>
</data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Specify the base URL of your on-premise hosted bitwarden installation.</value>
@@ -1284,25 +1284,72 @@
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
<value>Ya, dan Simpan</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
<value>Isi otomatis dan simpan</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<value>Organisasi</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>
<value>Pegang Yubikey di dekat bagian atas perangkat.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
<value>Coba Lagi</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
<value>Untuk melanjutkan, pegang YubiKey NEO Anda pada bagian belakang perangkat.</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>
<value>Layanan aksesibilitas sangat berguna untuk dimanfaatkan saat aplikasi tidak mendukung layanan isi otomatis.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Kata Sandi Diperbarui</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Di perbarui</value>
<comment>ex. Date this item was updated</comment>
</data>
<data name="AutofillActivated" xml:space="preserve">
<value>Isi Otomatis diaktifkan!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>Anda harus masuk ke aplikasi utama Bitwarden sebelum Anda dapat menggunakan Isi Otomatis.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Sekarang login Anda bisa diakses dengan mudah dari keyboard Anda saat masuk ke aplikasi atau lewat situs web.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>Sebaiknya fitur Isi Otomatis dinonaktifkan lewat Pengaturan, jika Anda tidak berencana menggunakannya.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Mengakses vault Anda lewat keyboard untuk mengisi otomatis sandi dengan cepat.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>Untuk mengisi otomatis sandi pada perangkat Anda, ikuti petunjuk berikut:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Pergi ke "Setting" di menu iOS app</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Pilih "Password &amp; Accounts"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Pilih "AutoFill Passwords"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Aktifkan AutoFill</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Pilih "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Isi Otomatis Sandi</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>Cara termudah untuk menambahkan login baru ke brankas Anda adalah dari ekstensi Isi Otomatis Sandi Bitwarden. Pelajari lebih lanjut penggunaan ekstensi ini dengan mengunjungi layar "Alat".</value>
</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>
@@ -1284,25 +1284,72 @@
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
<value>Si, e Salva</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
<value>Riempi automaticamente e salva</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<value>Organizzazione</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>
<value>Tieni il tuo Yubikey vicino alla parte superiore del dispositivo.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
<value>Riprova</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
<value>Per continuare, tieni il tuo YubiKey NEO sul retro del dispositivo.</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>
<value>Il servizio di accessibilità può essere utile quando le app non supportano il servizio di riempimento automatico standard.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Password Aggiornata</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
<value>Aggiornato</value>
<comment>ex. Date this item was updated</comment>
</data>
<data name="AutofillActivated" xml:space="preserve">
<value>Riempimento automatico Attivato!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>È necessario accedere all'app principale di Bitwarden prima di poter utilizzare il riempimento automatico.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>I tuoi login sono ora facilmente accessibili direttamente dalla tastiera durante l'accesso ad app e siti web.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>Se non prevedi di utilizzarli, ti consigliamo di disabilitare qualsiasi altra applicazione di Compilazione automatica nelle Impostazioni.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Accedi al tuo caveau direttamente dalla tastiera per velocizzare il riempimento automatico delle password.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>Per abilitare la compilazione automatica della password sul tuo dispositivo, segui queste istruzioni:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Vai all'app "Impostazioni" di iOS</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Clicca su "Password &amp; Account"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Clicca su "Riempimento automatico password"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Attiva Riempimento Automatico</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Seleziona "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Riempimento Automatico Password</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>Il modo più semplice per aggiungere nuovi accessi al tuo caveau è utilizzare l'estensione di Compilazione automatica password di Bitwarden. Ulteriori informazioni sull'utilizzo dell'estensione di Compilazione automatica password di Bitwarden andando nella schermata "Strumenti".</value>
</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>
@@ -1284,25 +1284,72 @@
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
<value>保存する</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
<value>自動入力して保存</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<value>組織</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>
<value>YubiKey を端末の上部にしっかりタッチし続けてください。</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
<value>もう一度実行</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
<value>続行するには、YubiKey NEO を端末の背面にしっかりタッチし続けてください。</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>
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>AutoFill Activated!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>You must log into the main Bitwarden app before you can use AutoFill.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Your logins are now easily accessable right from your keyboard while logging into apps and websites.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>We recommend disabling any other AutoFill apps under Settings if you do not plan to use them.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Access your vault directly from your keyboard to quickly autofill passwords.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>To enable password autofill on your device, follow these instructions:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Go to the iOS "Settings" app</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Tap "Passwords &amp; Accounts"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Tap "AutoFill Passwords"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Turn on AutoFill</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Select "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Password AutoFill</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the "Tools" screen.</value>
</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>
@@ -953,10 +953,10 @@
<value>이 기능을 사용하려면 프리미엄 멤버십이 필요합니다.</value>
</data>
<data name="AttachementAdded" xml:space="preserve">
<value>첨부 파일 추가</value>
<value>첨부 파일 추가</value>
</data>
<data name="AttachmentDeleted" xml:space="preserve">
<value>첨부 파일 삭제</value>
<value>첨부 파일 삭제</value>
</data>
<data name="ChooseFile" xml:space="preserve">
<value>파일 선택</value>
@@ -1284,25 +1284,72 @@
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
<value>예, 저장하겠습니다.</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
<value>자동 완성 및 저장</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<value>조직</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>
<value>기기의 위쪽에 Yubikey를 가져다 대세요.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
<value>다시 시도</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
<value>계속하려면 기기의 뒷면에 YubiKey NEO를 가져다 대세요.</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>
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>AutoFill Activated!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>You must log into the main Bitwarden app before you can use AutoFill.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Your logins are now easily accessable right from your keyboard while logging into apps and websites.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>We recommend disabling any other AutoFill apps under Settings if you do not plan to use them.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Access your vault directly from your keyboard to quickly autofill passwords.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>To enable password autofill on your device, follow these instructions:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Go to the iOS "Settings" app</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Tap "Passwords &amp; Accounts"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Tap "AutoFill Passwords"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. 자동 완성을 켜세요.</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. "Bitwarden"을 선택하세요.</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>비밀번호 자동 완성</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>보관함에 새 로그인을 추가하는 가장 쉬운 방법은 Bitwarden 비밀번호 자동 완성 확장 프로그램을 사용하는 것입니다. "도구" 화면으로 이동하여 Bitwarden 비밀번호 자동 완성 확장 프로그램에 대해 더 자세히 알아보세요.</value>
</data>
</root>

View File

@@ -606,7 +606,7 @@
<value>Det er ingen gjenstander i hvelvet ditt.</value>
</data>
<data name="NoItemsTap" xml:space="preserve">
<value>Det er ingen gjenstander i ditt hvelv for dette nettstedet. Trykk for å legge til en.</value>
<value>Det er ingen oppføringer i ditt hvelv for dette nettstedet. Trykk for å legge til en.</value>
</data>
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
<value>Denne innloggingen har verken et brukernavn eller passord satt opp.</value>
@@ -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,80 +1229,127 @@
<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>Yes, and Save</value>
<value>Ja, og lagre</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
<value>Autofyll og lagre</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<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 your Yubikey near the top of the device.</value>
<value>Hold din Yubikey nær toppen av enheten.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
<value>Prøv igjen</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
<value>For å fortsette, hold din YubiKey NEO mot baksiden av enheten.</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>
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>Autofyll aktivert!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>Du må logge deg inn i hoved Bitwarden-appen før du kan bruke Autofyll.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Innloggingene dine er nå lett tilgjengelige fra tastaturet når du skal logge deg på apper og nettsteder.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>Vi anbefaler å deaktivere alle andre Autofyll apper under innstillinger dersom du ikke har tenkt å bruke dem.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Få tilgang til hvelvet ditt direkte fra tastaturet for å raskt autofylle passord.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>Følg disse instruksjonene for å aktivere passord autofyll på enheten din:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Gå til iOS-appen "Innstillinger"</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Trykk på "Passord og kontoer"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Trykk «Autofyll passord»</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Slå på Autofyll</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Velg "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Passord Autofyll</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>Den enkleste måten å legge til nye innlogginger i hvelvet ditt er å bruke Bitwarden Passord Autofyll utvidelsen. Lær mer om Bitwarden Passord Autofyll utvidelsen ved å gå til "Verktøy" skjermen.</value>
</data>
</root>

View File

@@ -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>
@@ -1305,4 +1305,51 @@
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>AutoFill Activated!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>You must log into the main Bitwarden app before you can use AutoFill.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Your logins are now easily accessable right from your keyboard while logging into apps and websites.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>We recommend disabling any other AutoFill apps under Settings if you do not plan to use them.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Access your vault directly from your keyboard to quickly autofill passwords.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>To enable password autofill on your device, follow these instructions:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Go to the iOS "Settings" app</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Tap "Passwords &amp; Accounts"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Tap "AutoFill Passwords"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Turn on AutoFill</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Select "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Password AutoFill</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the "Tools" screen.</value>
</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>
@@ -1305,4 +1305,51 @@
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>AutoFill Activated!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>You must log into the main Bitwarden app before you can use AutoFill.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Your logins are now easily accessable right from your keyboard while logging into apps and websites.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>We recommend disabling any other AutoFill apps under Settings if you do not plan to use them.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Access your vault directly from your keyboard to quickly autofill passwords.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>To enable password autofill on your device, follow these instructions:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Go to the iOS "Settings" app</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Tap "Passwords &amp; Accounts"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Tap "AutoFill Passwords"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Turn on AutoFill</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Select "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Password AutoFill</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the "Tools" screen.</value>
</data>
</root>

View File

@@ -337,7 +337,7 @@
<comment>The title for the sync page.</comment>
</data>
<data name="ThankYou" xml:space="preserve">
<value>Obrigado</value>
<value>Agradecimentos</value>
</data>
<data name="Tools" xml:space="preserve">
<value>Ferramentas</value>
@@ -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>
@@ -1284,25 +1284,72 @@
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Yes, and Save</value>
<value>Sim, e Salvar</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Auto-fill and save</value>
<value>Autopreencher e salvar</value>
</data>
<data name="Organization" xml:space="preserve">
<value>Organization</value>
<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>Hold your Yubikey near the top of the device.</value>
<value>Segure a sua Yubikey perto do topo do dispositivo.</value>
</data>
<data name="TryAgain" xml:space="preserve">
<value>Try Again</value>
<value>Tentar novamente</value>
</data>
<data name="YubiKeyInstructionIos" xml:space="preserve">
<value>To continue, hold your YubiKey NEO against the back of the device.</value>
<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>The accessibility service may be helpful to use when apps do not support the standard auto-fill service.</value>
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>Autopreenchimento Ativado!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>Você deve iniciar a sessão no aplicativo principal do Bitwarden, antes de poder usar o Autopreenchimento.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>Suas credenciais agora são facilmente acessadas diretamente do seu teclado, enquanto você faz login em aplicativos e sites.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>Recomendamos desabilitar qualquer outro aplicativo de autopreenchimento em Ajustes, se você não pretende usá-los.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Acesse seu cofre diretamente do seu teclado para autopreencher as senhas rapidamente.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>Para ativar o autopreenchimento de senha no seu dispositivo, siga estas instruções:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Acesse o aplicativo "Ajustes" do iOS</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Toque em "Senhas e Contas"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Toque em "Preencher Senhas"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Ative o Autopreenchimento</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Selecione "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Autopreenchimento de Senha</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>A maneira mais fácil de adicionar novas credenciais ao seu cofre é usando a extensão Autopreencher do Bitwarden. Saiba mais sobre como usar a extensão Autopreencher do Bitwarden navegando até a tela "Ferramentas".</value>
</data>
</root>

View File

@@ -584,7 +584,7 @@
<comment>Minimum numeric characters for password generator settings</comment>
</data>
<data name="MinSpecial" xml:space="preserve">
<value>Especiais minímos</value>
<value>Especiais mínimos</value>
<comment>Minimum special characters for password generator settings</comment>
</data>
<data name="MoreSettings" xml:space="preserve">
@@ -606,7 +606,7 @@
<value>Não existem itens no seu cofre.</value>
</data>
<data name="NoItemsTap" xml:space="preserve">
<value>Não existem itens no seu cofre para este website. Toque para adicionar um.</value>
<value>Não existem itens no seu cofre para este website/aplicação. Toque para adicionar um.</value>
</data>
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
<value>Esta credencial não tem um nome de utilizador ou palavra passe configurados.</value>
@@ -631,7 +631,7 @@
<value>Gerador de palavras-passe</value>
</data>
<data name="PasswordHint" xml:space="preserve">
<value>Dica de palavra-passe</value>
<value>Dica da palavra-passe</value>
</data>
<data name="PasswordHintAlert" xml:space="preserve">
<value>Enviámos-lhe um email com a dica da sua palavra-passe mestra.</value>
@@ -644,7 +644,7 @@
<comment>Push notifications for apple products</comment>
</data>
<data name="RateTheApp" xml:space="preserve">
<value>Avalie a aplicação</value>
<value>Avaliar a aplicação</value>
</data>
<data name="RateTheAppDescription" xml:space="preserve">
<value>Por favor considere ajudar-nos com uma boa análise!</value>
@@ -726,7 +726,7 @@
<value>Ver item</value>
</data>
<data name="WebVault" xml:space="preserve">
<value>Cofre web Bitwarden</value>
<value>Cofre Web Bitwarden</value>
</data>
<data name="WebVaultDescription" xml:space="preserve">
<value>Gira os seus itens a partir de qualquer navegador web com o cofre web Bitwarden.</value>
@@ -807,7 +807,7 @@
<value>Está a pesquisar por um item de auto-preenchimento para "{0}".</value>
</data>
<data name="ShareVault" xml:space="preserve">
<value>Partilhe o seu cofre</value>
<value>Partilhar o seu cofre</value>
</data>
<data name="ShareVaultDescription" xml:space="preserve">
<value>Crie uma organização para partilhar os seus itens em segurança com outros utilizadores.</value>
@@ -887,7 +887,7 @@
</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>
@@ -944,7 +944,7 @@
<value>Copiar TOTP</value>
</data>
<data name="DisableAutoTotpCopyDescription" xml:space="preserve">
<value>Se o seu início de sessão tem uma chave de autenticador anexada ao mesmo, o código de verificação TOTP é copiado automaticamente para a sua área de transferência quando quer que auto-preencha o início de sessão.</value>
<value>Se a sua credencial tem uma chave de autenticador anexada à mesma, o código de verificação TOTP é copiado automaticamente para a sua área de transferência quando quer que auto-preencha a credencial.</value>
</data>
<data name="DisableAutoTotpCopy" xml:space="preserve">
<value>Desativar cópia automática de TOTP</value>
@@ -1305,4 +1305,51 @@
<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>
<data name="AutofillActivated" xml:space="preserve">
<value>Auto-preenchimento ativado!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>Tem de iniciar sessão na aplicação Bitwarden principal antes de poder utilizar auto-preenchimento.</value>
</data>
<data name="AutofillSetup" xml:space="preserve">
<value>As suas credenciais são agora facilmente acessíveis a partir do seu teclado ao iniciar sessão em aplicações e websites.</value>
</data>
<data name="AutofillSetup2" xml:space="preserve">
<value>Recomendamos desativar quaisquer outras aplicações de auto-preenchimento nas Definições se não as planeia utilizar.</value>
</data>
<data name="BitwardenAutofillDescription" xml:space="preserve">
<value>Aceda ao seu cofre diretamente a partir do seu teclado para rapidamente auto-preencher palavras-passe.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>Para ativar o auto-preenchimento de palavras-passe no seu dispositivo, siga estas instruções:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Vá à aplicação iOS "Definições"</value>
</data>
<data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Toque em "Palavras-passe e contas"</value>
</data>
<data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Toque em "auto-preencher palavras-passe"</value>
</data>
<data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Ligue o auto-preenchimento</value>
</data>
<data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Selecione "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Auto-preenchimento de palavras-passe</value>
</data>
<data name="BitwardenAutofillAlert" xml:space="preserve">
<value>A maneira mais fácil de adicionar novas credenciais ao seu cofre é ao utilizar a extensão de auto-preenchimento de palavras-passe do Bitwarden. Saiba mais acerca de como utilizar a extensão de auto-preenchimento de palavras-passe do Bitwarden ao navegar para o ecrã de "Ferramentas".</value>
</data>
</root>

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