Compare commits

..

657 Commits

Author SHA1 Message Date
Neeraj Gupta
258cdca69b [auth] Reduce progress bar refresh rate to lower CPU usage (#4517)
## Description
Related
https://github.com/ente-io/ente/issues/2003#issuecomment-2563380828
## Tests
2024-12-27 13:20:32 +05:30
Neeraj Gupta
2a19c30d0e Lint fix 2024-12-27 13:12:42 +05:30
Neeraj Gupta
d23c22762b [auth] Bump version 4.2.1 2024-12-27 13:12:29 +05:30
Neeraj Gupta
bf9d0e3d6b [auth] Reduce refresh rate for progress bar to lower CPU usage 2024-12-27 12:18:35 +05:30
Manav Rathi
a818f062b1 [web] New translations (#4515)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-12-27 12:10:13 +05:30
Crowdin Bot
f57f1a8636 New Crowdin translations by GitHub Action 2024-12-27 06:39:11 +00:00
Manav Rathi
da78c45b1d [web] Minor translation keys improvements (#4514) 2024-12-27 12:08:30 +05:30
Manav Rathi
3429a9f3d6 Fixes 2024-12-27 12:03:35 +05:30
Manav Rathi
cdbd86d63c Rename 2024-12-27 11:55:58 +05:30
Manav Rathi
69e1aa18e6 fix 2024-12-27 11:54:44 +05:30
Manav Rathi
6f2079c7c6 Ren 2024-12-27 11:50:48 +05:30
Manav Rathi
a14358416a [web] New translations (#4513)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-12-27 11:22:35 +05:30
Crowdin Bot
57c353a443 New Crowdin translations by GitHub Action 2024-12-27 05:48:15 +00:00
Manav Rathi
dd7cea1f96 [web] Switch to new dup implementation (same as mobile) (#4512) 2024-12-27 11:17:25 +05:30
Manav Rathi
6d2a223acf Fixes 2024-12-27 11:12:58 +05:30
Manav Rathi
eca0137426 Replace old impl 2024-12-27 11:10:05 +05:30
Manav Rathi
28ab3c321c Loc 2024-12-27 09:34:13 +05:30
Manav Rathi
5c2c6b2a84 Set 2024-12-27 09:13:37 +05:30
Manav Rathi
4ae0683c62 ids are enough and less confusinng 2024-12-27 08:59:28 +05:30
Manav Rathi
0a6740bb2e Prune 2024-12-27 08:46:40 +05:30
Manav Rathi
b026020485 [web] New dedup, same as mobile - Almost completed (#4508)
The changes are done, haven't swapped with the existing implementation
yet pending another scan.
2024-12-26 19:44:27 +05:30
Manav Rathi
b71fa478b9 Remote expects uniques 2024-12-26 19:31:15 +05:30
Manav Rathi
b9c992cae0 Dedup 2024-12-26 19:19:27 +05:30
Manav Rathi
2845d7bfeb lf 2024-12-26 18:49:34 +05:30
Manav Rathi
b09d6ab2a6 Sync after dedup 2024-12-26 18:46:28 +05:30
Manav Rathi
94ce77c07b Move 2024-12-26 18:45:18 +05:30
Manav Rathi
a292f01187 Move 2024-12-26 18:42:57 +05:30
Manav Rathi
aae2632b19 See: [Note: strict mode migration] 2024-12-26 18:28:54 +05:30
Manav Rathi
746c85bc9f Move 2024-12-26 18:23:06 +05:30
Manav Rathi
adeab53d3b Move 2024-12-26 18:03:32 +05:30
Manav Rathi
3e23ff9c9b Move 2024-12-26 17:54:58 +05:30
Manav Rathi
dca6e02286 Move 2024-12-26 17:52:26 +05:30
Manav Rathi
daf3fd2a75 Sketch 2024-12-26 17:42:41 +05:30
Manav Rathi
f5a3b8a3fb Del 2024-12-26 17:29:13 +05:30
Manav Rathi
7cd1ce0a99 Avoid the same name 2024-12-26 17:13:59 +05:30
Manav Rathi
1b863005ea Ref 2024-12-26 17:11:48 +05:30
Ashil
b580756e6b [mob][photos] On freeing up space, retry deleting local files in batches with smaller max batch sizes if no files are deleted with bigger max batch sizes (#4505) 2024-12-26 15:53:24 +05:30
Manav Rathi
26fb47c165 Invert the processing 2024-12-26 15:50:35 +05:30
Manav Rathi
3f21011392 Retain files so that we can reuse trashFiles code 2024-12-26 15:19:15 +05:30
Manav Rathi
7348170a36 Tweak progress 2024-12-26 14:57:46 +05:30
Manav Rathi
3919fb0db2 Progress is not tied to specific groups 2024-12-26 14:42:05 +05:30
Manav Rathi
ad6a0e9c31 linprog 2024-12-26 13:38:02 +05:30
Manav Rathi
be3896826d [web] Refactor some APIs we'll use for dedup (#4506) 2024-12-26 13:00:15 +05:30
Manav Rathi
268550f292 lf 2024-12-26 12:56:47 +05:30
Manav Rathi
68e557124c Up 2024-12-26 12:55:33 +05:30
Manav Rathi
96863923d1 Tweak 2024-12-26 12:21:57 +05:30
Manav Rathi
a22b0aec58 Tweak 2024-12-26 12:11:35 +05:30
ashilkn
93e26c6caf [mob][photos] Retry deleting local files in batches with smaller max batch sizes if no files are deleted with a bigger max batch size 2024-12-26 12:01:18 +05:30
Manav Rathi
8a8f5c20c6 Tweak 2024-12-26 11:56:26 +05:30
Manav Rathi
3c7b6694e9 Ren 2024-12-26 11:53:21 +05:30
Manav Rathi
c37d85f6c5 Move 2024-12-26 11:49:28 +05:30
Neeraj Gupta
e0abb2de9c [auth] Add dependency on super_text_layout 2024-12-26 11:44:37 +05:30
Neeraj Gupta
b73ba4a22f [auth][mac] build changes 2024-12-26 11:42:29 +05:30
Manav Rathi
912279e3cf Dedup 2024-12-26 11:35:32 +05:30
Manav Rathi
5a0bab9304 Merge 2024-12-26 11:33:58 +05:30
Manav Rathi
a9cd56c4ce Ren 2024-12-26 11:28:18 +05:30
Manav Rathi
5b4028378b Retain all collections associated 2024-12-26 11:20:45 +05:30
Ashil
57bd5b9d17 [mob][photos] In-app public link fixes (#4495)
## Description

Fixed these issues:
- Unrelated files coming up (these are local device files) in public
link when opened in-app.
- Max number of files in link capped to 2000.
- Sort order not working.
2024-12-24 21:07:41 +05:30
Manav Rathi
2bd074bd79 [web] New dedup - WIP - Part (n-1)/n (#4496) 2024-12-24 18:41:03 +05:30
Manav Rathi
a8d831364d Progress 2 2024-12-24 18:25:45 +05:30
ashilkn
21f0602161 [mob][photos] Fix sort order setting not reflecting on public link opened in-app 2024-12-24 18:13:28 +05:30
Manav Rathi
1ac2d60c7b Progress 2024-12-24 18:06:13 +05:30
Manav Rathi
a098481b98 tryctch 2024-12-24 18:03:02 +05:30
Manav Rathi
472339cafb Reduce potential for aliasing 2024-12-24 17:56:03 +05:30
Manav Rathi
d24f5bcee7 ftr 2024-12-24 17:46:36 +05:30
ashilkn
bd0e8e6fe6 [mob][photos] Fix in-app public links only showing upto 2000 files 2024-12-24 17:25:33 +05:30
Neeraj Gupta
c9d2a0a4ca [mob] Remove hardcoded app urls for passkey & cast (#4494)
## Description

## Tests
Tested locally
2024-12-24 16:57:47 +05:30
Neeraj Gupta
1a6eb26f2b [mob] Remove hardcoded url for cast 2024-12-24 16:51:30 +05:30
Manav Rathi
7c2fce2ebe Fin local part 2024-12-24 16:49:42 +05:30
Neeraj Gupta
e90871ea6b Merge remote-tracking branch 'origin/main' into remove_hardcoded_apps_url 2024-12-24 16:34:31 +05:30
Neeraj Gupta
3ca78cac35 [mob] Remove hardcoded url for accounts/passkey 2024-12-24 16:34:09 +05:30
Neeraj Gupta
49ddfdfde5 [mobile] New translations (#4493)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-12-24 16:33:29 +05:30
Crowdin Bot
bc76864587 New Crowdin translations by GitHub Action 2024-12-24 11:03:00 +00:00
Manav Rathi
4f1d3c23f5 Fix and imp 2024-12-24 16:31:39 +05:30
ashilkn
cc674183cd [mob][photos] Use genId + uploadedId instead of just genId for value key to make sure all keys are unique when opening a public link in-app (genID is null for all files in public link) 2024-12-24 16:30:38 +05:30
Manav Rathi
86bd098406 Sort 2024-12-24 16:29:55 +05:30
Manav Rathi
e5fe3a7255 size 2024-12-24 16:28:16 +05:30
ashilkn
df68d3f005 [mob][photos] Fix local files coming up when public links are opened in-app 2024-12-24 16:25:55 +05:30
ashilkn
9a6a46fd0d [mob][photos] Chore 2024-12-24 16:23:57 +05:30
Neeraj Gupta
14c9929451 [server] Rename accountUrl -> accountsUrl (#4492)
## Description
Related https://github.com/ente-io/ente/pull/4491
## Tests
2024-12-24 15:54:24 +05:30
Manav Rathi
54f9bd880a Funnel 2024-12-24 15:43:14 +05:30
Neeraj Gupta
aaa636345c [mob] Remove hardcoded url for accounts/passkey 2024-12-24 15:32:41 +05:30
Neeraj Gupta
6f3e02888e [auth] Remove hardcoded accounts url (#4491)
## Description

## Tests
2024-12-24 15:26:16 +05:30
Neeraj Gupta
42a8b5c826 [server] Rename accountUrl -> accountsUrl 2024-12-24 15:25:04 +05:30
Manav Rathi
24674f6da6 Notes and changes based on discussion
The hash change now matches mobile
2024-12-24 15:25:03 +05:30
Neeraj Gupta
90b45665f5 [auth] Remove hardcoded accounts url 2024-12-24 15:23:58 +05:30
Manav Rathi
8a217a292b Comments 2024-12-24 14:18:31 +05:30
Neeraj Gupta
047fede844 [mobile] New translations (#4471)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-12-24 14:02:41 +05:30
Crowdin Bot
e77b557990 New Crowdin translations by GitHub Action 2024-12-24 07:11:57 +00:00
Manav Rathi
c2bfcf23c0 larger 2024-12-24 12:36:35 +05:30
Vishnu Mohandas
646a012734 [mob] Fix typos (#4481) 2024-12-24 12:36:20 +05:30
Manav Rathi
21332c6b92 Placeholder activity indicator 2024-12-24 12:26:16 +05:30
Manav Rathi
f9c101241e Sketch 2024-12-24 12:10:40 +05:30
Manav Rathi
bc6f147f5e Fix 2024-12-24 11:50:51 +05:30
Manav Rathi
fbaa360741 do both transitions simultaneously 2024-12-24 10:12:09 +05:30
Manav Rathi
4029398351 Reduce noise 2024-12-24 10:07:43 +05:30
Manav Rathi
7602d48bd9 Refresh list on width and sort order changes 2024-12-24 09:54:18 +05:30
Manav Rathi
f28d50ace6 div 2024-12-24 09:24:03 +05:30
Manav Rathi
b026b30172 layout 2024-12-24 09:03:07 +05:30
Manav Rathi
977f5c21a6 [web] New dedup - WIP - Part x/x (#4482) 2024-12-23 20:41:12 +05:30
Manav Rathi
dafbf23d67 2 line 2024-12-23 19:39:31 +05:30
vishnukvmd
d9bc6597c0 Fix typo 2024-12-23 19:28:46 +05:30
vishnukvmd
913a80591b Fix typo 2024-12-23 19:26:51 +05:30
Manav Rathi
26c0a8e1d5 Title 2024-12-23 19:25:37 +05:30
Manav Rathi
2e2c972a84 Tiles 2024-12-23 19:04:17 +05:30
Manav Rathi
748dd2b0e2 [web] New dedup - WIP (#4478) 2024-12-23 17:20:50 +05:30
Manav Rathi
dbb376056d Fix type 2024-12-23 17:13:56 +05:30
Manav Rathi
b31fc5cbe9 Pad 2024-12-23 17:02:08 +05:30
Manav Rathi
cb76ba7560 Var 2024-12-23 16:33:44 +05:30
Manav Rathi
e915ded2de fit in 2024-12-23 16:18:12 +05:30
mangesh
eedc538283 [docs] minor fixes in Dockerfile and some others (#4473) 2024-12-23 16:11:25 +05:30
Neeraj Gupta
294b333d0e [auth] New translations (#4472)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-12-23 16:10:54 +05:30
Vishnu Mohandas
8f705f2f72 [auth] Make "Ente Auth" at the top of app similar to marketing images/Photos app (#4469)
## Description

Currently the "Ente Auth" text at the top of the mobile/desktop app is
different in style to the one in the marketing images and the equivalent
in the Photos app. So I just copied the style from the Photos app.

Marketing image:


![auth-home-screen-dark](https://github.com/user-attachments/assets/0e90b524-391c-4de5-b5d4-da4688149aea)

Currently: (not the latest version of the app but the text part is the
same except for the capitalization)


![screenshots](https://github.com/user-attachments/assets/cd39fdf1-d518-4b24-8f60-e0960f2c9985)

## Tests

I haven't tested this.
2024-12-23 16:10:44 +05:30
Neeraj Gupta
c5c0ee5ddf [auth] Update simple-icons (#4477)
## Description
Fixes https://github.com/ente-io/ente/issues/4476
## Tests
2024-12-23 16:05:30 +05:30
Neeraj Gupta
5f43f03a65 Update simple-icons 2024-12-23 16:02:50 +05:30
Manav Rathi
aa62f4003c Dup the layout algo 2024-12-23 15:56:51 +05:30
Manav Rathi
6c5dbc3696 Grid 2024-12-23 15:14:52 +05:30
Neeraj Gupta
1bef409552 [server] Return various app urls as part of relevant API response. (#4458)
## Description

For the cast dialog, that we show on the app, before making the API call
to pair. Have parked that change for now.

## Tests
2024-12-23 15:08:00 +05:30
Neeraj Gupta
62155040da Review comment + return castUrl as part of featureFlag 2024-12-23 14:19:33 +05:30
Manav Rathi
592dc26d8b Optimize unnecessary rerenders 2024-12-23 14:11:04 +05:30
Manav Rathi
1af1c3f196 Probe 2024-12-23 14:09:24 +05:30
Manav Rathi
6f077310c1 [web] New translations (#4470)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-12-23 10:27:57 +05:30
Neeraj Gupta
905fc2ad78 [server] Disable 2fa on legacy account recovery (#4463)
## Description

## Tests
2024-12-23 10:26:56 +05:30
mngshm
e6e4f313de minor: add log level for caddy and change build sequence 2024-12-23 09:43:55 +05:30
mngshm
1ae8caa917 fix:remove serve for non-existent albums app and add note 2024-12-23 09:42:41 +05:30
Crowdin Bot
209228326d New Crowdin translations by GitHub Action 2024-12-23 01:17:31 +00:00
Crowdin Bot
0533f99313 New Crowdin translations by GitHub Action 2024-12-23 00:35:18 +00:00
dnred
545cf40710 Update home_page.dart 2024-12-22 22:20:59 +01:00
dnred
8ae8ed20fe Make the "Ente Auth" text similar to marketing images 2024-12-22 21:55:43 +01:00
Neeraj Gupta
0df0126af4 [server] Disable 2fa on legacy account recovery 2024-12-21 17:15:50 +05:30
Neeraj Gupta
60ad6ef713 [auth] Potential fix for desktop build (#4462)
## Description

## Tests
2024-12-21 17:03:01 +05:30
Neeraj Gupta
fc626c1287 Update pod for macos 2024-12-21 17:00:04 +05:30
Neeraj Gupta
4035e364df [auth] Update github workflow for auth-release 2024-12-21 16:56:47 +05:30
Neeraj Gupta
791ec10a0f [auth] Improve icon path matching (#4461)
## Description

## Tests
2024-12-21 16:40:28 +05:30
Neeraj Gupta
87ab805cf7 Lint fix 2024-12-21 16:37:24 +05:30
Neeraj Gupta
447bb72556 Fix altname icons when slug is missing 2024-12-21 16:32:46 +05:30
Neeraj Gupta
c07e2f1387 Improve simple-icon path creation 2024-12-21 16:24:50 +05:30
Neeraj Gupta
151a0b3ab7 Pull simple-icons 2024-12-21 16:04:29 +05:30
Neeraj Gupta
cf15d68bd2 Merge remote-tracking branch 'origin/main' into auth_minor_1 2024-12-21 15:57:41 +05:30
Neeraj Gupta
e4a05edc12 iOS build changes 2024-12-21 15:57:33 +05:30
Neeraj Gupta
879d6571bc Show scroll bar 2024-12-21 15:57:04 +05:30
Neeraj Gupta
2496350fad [auth] fix formatting of hex value in custom-icons.json (#4460)
## Description

Error:  **Invalid radix-16 number (at character 3) 0xFF#4687FF**


![image](https://github.com/user-attachments/assets/60649484-51a8-46e4-a06c-6c30880b20b7)

![image](https://github.com/user-attachments/assets/51236a07-2d70-4433-a450-3fa32fe9bf7e)
2024-12-21 15:52:30 +05:30
Aman Raj
653a7f22ef [auth] Bump version 2024-12-21 15:33:34 +05:30
Aman Raj
6071df2083 [auth] fix formatting of hex value in custom-icons.json 2024-12-21 15:27:49 +05:30
Neeraj Gupta
f6e93ab060 [auth] Rename 2024-12-21 15:07:14 +05:30
Neeraj Gupta
ddc9dfe552 [auth] Fix icons not showing on Choose Icon page (#4459) 2024-12-21 15:06:23 +05:30
Aman Raj
b9b87c1570 [auth] Bump version 2024-12-21 15:03:08 +05:30
Aman Raj
3a413524f8 [auth] fix icons not showing 2024-12-21 14:58:28 +05:30
Neeraj Gupta
4830451d4e [docs] minor fixes in web-apps hosting doc (#4446)
Did not move the [!IMPORTANT] section at the bottom like discussed,
because I don't feel that would change the situation a lot.

Also fixed the CMD command, the flags and serve url were wrong in the
previous commit (wonder how it worked on local system, probably loaded
wrong image in the compose.yaml)
2024-12-21 12:02:26 +05:30
Neeraj Gupta
4cb11f4b06 [server] Return accounts & familyUrl 2024-12-21 11:56:43 +05:30
Neeraj Gupta
150faa5d84 [server] Config for accounts,cast, & family apps 2024-12-21 11:46:12 +05:30
Neeraj Gupta
9b15102058 [mob] Update permission dialog (#4456)
## Description




## Tests
2024-12-21 11:20:06 +05:30
Neeraj Gupta
25bb175ff7 Remove redundant import 2024-12-21 10:21:41 +05:30
Neeraj Gupta
ec7b61c36a [mob] Update permission dialog 2024-12-21 10:21:06 +05:30
Manav Rathi
85735b4ff0 [web] New dedup (same as mobile) - WIP (#4454) 2024-12-20 18:44:12 +05:30
Manav Rathi
8029829d9b Retain sel on sort 2024-12-20 18:30:31 +05:30
Manav Rathi
87c5f05f84 ds all 2024-12-20 18:24:12 +05:30
Manav Rathi
356b2542c9 Cherry 2024-12-20 18:14:05 +05:30
Manav Rathi
dc3329368e Sel 2024-12-20 18:12:27 +05:30
Manav Rathi
92868dccb4 sz/count 2024-12-20 17:49:50 +05:30
Manav Rathi
49942909b0 Pass data 2024-12-20 17:35:55 +05:30
Manav Rathi
b36c8de417 List 2024-12-20 17:26:34 +05:30
Manav Rathi
a0335b82c6 Extr 2024-12-20 17:20:57 +05:30
Manav Rathi
01cbf29217 Button 2024-12-20 16:56:32 +05:30
Manav Rathi
7c464a0d60 Sort 2024-12-20 16:41:33 +05:30
Laurens Priem
8c20f5f660 Ml string (#4453)
## Description

## Tests
2024-12-20 11:54:55 +01:00
Manav Rathi
671199e286 Redirect 2024-12-20 16:19:04 +05:30
laurenspriem
6805ee1a2a [mob][photos] Suggestions less filtering on large size 2024-12-20 11:36:17 +01:00
Ashil
fd8246705c [mob][photos] Memories widget UI changes (#4448)
### Description 

Change seen and unseen memory states.

(New state on the right)
<img width="824" alt="Screenshot 2024-12-20 at 1 12 47 PM"
src="https://github.com/user-attachments/assets/f8d176f2-08d0-49fc-9758-4f8f75ef4479"
/>
2024-12-20 15:45:58 +05:30
Neeraj Gupta
65e1745aa0 [auth] HTML export fixes (#4449) 2024-12-20 15:45:45 +05:30
Neeraj Gupta
c6c3b1f9bd [auth] Remove Contact Support option when no duplicate code found (#4450)
## Description

## Tests
2024-12-20 15:45:30 +05:30
Manav Rathi
175467267a [desktop] Flush file writes (#4452)
A customer reported a partial export_status.json being written to an
external drive. Forcing a flush to attempt to reduce chances of this
happening. Since this particular code path is only used for writing JSON
files (export status and metadata), we unconditionally enable this for
all writes.
2024-12-20 15:17:27 +05:30
Manav Rathi
9756c178bf [desktop] Flush file writes
A customer reported a partial export_status.json being written to an external
drive. Forcing a flush to attempt to reduce chances of this happening. Since
this particular code path is only used for writing JSON files (export status and
metadata), we unconditionally enable this for all writes.
2024-12-20 15:13:46 +05:30
Manav Rathi
af420a8fc3 [web] New dedupe WIP + overflow menu cleanup (#4451) 2024-12-20 15:07:41 +05:30
Manav Rathi
9a5d977419 lf 2024-12-20 15:01:06 +05:30
Manav Rathi
d4ae5c118b Swap and fin 2024-12-20 15:00:35 +05:30
Manav Rathi
605fda2710 Swap 2024-12-20 14:59:45 +05:30
Manav Rathi
0181693736 Swap 2024-12-20 14:57:29 +05:30
Manav Rathi
5c92d093ca Swap 2024-12-20 14:56:33 +05:30
Manav Rathi
a6c9a153e7 Fix watch folder opening 2024-12-20 14:24:20 +05:30
Manav Rathi
613f7294e1 Swap 2024-12-20 14:20:19 +05:30
Manav Rathi
facd05bd89 Swap 2024-12-20 14:15:42 +05:30
Manav Rathi
4bbe71e135 Use 2024-12-20 14:12:05 +05:30
Manav Rathi
5583902433 tt 2024-12-20 14:02:12 +05:30
Manav Rathi
664c723c78 Tweak 2024-12-20 13:47:14 +05:30
Aman Raj
9b35fe04b9 [auth] remove Contact Support option when no duplicate code found 2024-12-20 13:42:48 +05:30
Manav Rathi
34068d09ba Use regular menu 2024-12-20 13:35:52 +05:30
Aman Raj
c23b22cc5b [auth] Extract String 2024-12-20 13:34:23 +05:30
Aman Raj
065382ddd2 [auth] Use better names 2024-12-20 13:34:11 +05:30
Aman Raj
5a72686e53 [auth] use table to display exported code contents 2024-12-20 13:29:38 +05:30
Manav Rathi
8c5b77cd52 Extr 2024-12-20 13:08:12 +05:30
Manav Rathi
d30dce0896 Menu 2024-12-20 13:05:30 +05:30
ashilkn
c453827cc8 [mob][photos] Make text alignment perfect 2024-12-20 12:57:21 +05:30
Manav Rathi
1068b6811f Dup 2024-12-20 12:51:45 +05:30
ashilkn
09fe2c6f7e [mob][photos] Minor perf improvement 2024-12-20 12:50:26 +05:30
Manav Rathi
a31803e3f5 Appear 2024-12-20 12:41:39 +05:30
ashilkn
2ec8ae34b8 [mob][photos] Remove unnecessary widget + minor UI tweak on memory widget 2024-12-20 12:33:17 +05:30
Manav Rathi
3263542f5e fin 1 2024-12-20 12:26:55 +05:30
Manav Rathi
a302f986d7 Mirror files 2024-12-20 12:04:32 +05:30
Manav Rathi
69ccf7d3c9 Shorten 2024-12-20 12:00:16 +05:30
Manav Rathi
76308cc9d0 Name 2024-12-20 11:56:18 +05:30
Manav Rathi
1d02732719 Impl 2024-12-20 11:43:07 +05:30
ashilkn
55fa86a6c8 [mob][photos] Change seen and unseen memories UI state 2024-12-20 11:36:25 +05:30
Manav Rathi
39fad29bc8 [web] Automatically update search results on deletes (#4445)
...and other actions which the search results are being shown.
2024-12-19 16:00:24 +05:30
mngshm
2ebe8712e8 fix[web-docs]:add env vars for albums and accounts endpoints 2024-12-19 15:59:41 +05:30
Manav Rathi
1f7176cea2 Update search results on delete etc 2024-12-19 15:47:35 +05:30
Manav Rathi
bede7559be Move to reducer 2024-12-19 14:41:32 +05:30
Manav Rathi
77563a7483 Reduce scope 2024-12-19 12:53:24 +05:30
Manav Rathi
37df79314a Use count from search results 2024-12-19 12:39:13 +05:30
Manav Rathi
fc5d1f931c Move to reducer 2024-12-19 12:18:32 +05:30
Manav Rathi
243948f182 Revert "[web] Reflect deletes in search result"
This reverts commit ddc953045b.

Because count doesn't get updated this way.
2024-12-19 12:04:04 +05:30
Manav Rathi
ddc953045b [web] Reflect deletes in search result 2024-12-19 11:51:17 +05:30
Neeraj Gupta
f74f285b7f [docs] improvements to external s3 guide (#4398) 2024-12-19 10:46:53 +05:30
Neeraj Gupta
2a4a886fca [server] Support for storing preview files (#4226)
## Description
- This change introduced the concept of associated object for a file.
- Added additional columns for object_id, object_nonce, and object_size.

Depending upon data_type, the values of certain columns will be nil.
The original size column will reflect total size for that particular
type. In case of vid_preview, it's size of the playlist + size of the
preview video.



## Tests

- [x] Replication
- [x] Test Deletion post replication
2024-12-19 10:06:15 +05:30
Ashil
43e3e44e5c [mob][photos] Move delete option in file selection actions to make it easily accessible (no scrolling needed) (#4440) 2024-12-19 09:26:39 +05:30
ashilkn
09cc226511 [mob][photos] Move delete option in file selection actions to make it easily accessible (no scrolling needed) 2024-12-18 20:43:44 +05:30
laurenspriem
d9f62b8956 [mob][photos] Log empty person 2024-12-18 15:08:42 +01:00
Manav Rathi
a691745ef7 [web] Retry on failures in fetching already indexed items (#4439)
https://github.com/ente-io/ente/issues/4087#issuecomment-2525073128
2024-12-18 19:18:29 +05:30
Manav Rathi
108e984f29 [web] Retry on failures in fetching already indexed items
https://github.com/ente-io/ente/issues/4087#issuecomment-2525073128
2024-12-18 19:00:38 +05:30
laurenspriem
fbbb8edce1 [mob][photos] Copy people empty state 2024-12-18 14:26:31 +01:00
Manav Rathi
72dd4949ce [web] Remove node buffer dependency from base 58 conversion and cleanup (#4438) 2024-12-18 18:54:27 +05:30
Manav Rathi
948b869bea Move and update 2024-12-18 18:46:15 +05:30
Manav Rathi
3cde395f42 Fix the buffer warning 2024-12-18 18:42:19 +05:30
Manav Rathi
05165728f1 Use 2024-12-18 18:38:36 +05:30
Manav Rathi
42f2bb819b Move 2024-12-18 18:38:05 +05:30
Manav Rathi
6b28aa1652 Use 2024-12-18 18:22:26 +05:30
Manav Rathi
d167da02d5 both 2024-12-18 18:19:59 +05:30
Manav Rathi
34fe3bee7f Move 2024-12-18 18:02:55 +05:30
Manav Rathi
4bfa398312 [desktop] Fix export when selecting root folder (#4437)
This fixes the issue where files would be exported twice on pressing
resync if the user selected "C://" (or some other root drive) as the
export destination.
2024-12-18 17:14:53 +05:30
Manav Rathi
5920999bf4 Use 2024-12-18 17:08:35 +05:30
Neeraj Gupta
7559ab4236 [auth] Align icon to show on top center of Code Edit Screen & Bump Version (#4436)
## Description
Light Mode


![image](https://github.com/user-attachments/assets/9db0c583-d798-47fa-b17a-9b1c847ff704)

Dark Mode


![image](https://github.com/user-attachments/assets/5c14616b-6ee6-4fa6-8a7a-c4dfb9b7b3d4)

## Tests
2024-12-18 16:58:10 +05:30
Manav Rathi
44d2f66260 pathJoin 2024-12-18 16:45:01 +05:30
Aman Raj
ae3b4604e9 [auth] Bump version v4.1.8 2024-12-18 16:36:57 +05:30
Manav Rathi
7b32ace2d9 Revert "[desktop] Add some temporary debug traces"
This reverts commit 2bc1c90637.
2024-12-18 16:33:05 +05:30
Ashil
29052e2888 [mob][photos] Use media_kit player for videos not supported by native player (#4429)
## Description

On iOS, if a video is unsupported by the native player, the app will
switch automatically to use media_kit player.
On android, user will have to manually switch to the media_kit player.  

I used white with 20% opacity for the icon that switches to the MediaKit
player, making it most noticeable against the darkest background (black,
when the video isn't playable) and less prominent against lighter
backgrounds.



https://github.com/user-attachments/assets/b4316c6e-1691-4328-8984-4d8240179873



Have fixed a UI/UX issue on the video player seen when the video has a
caption/description.
2024-12-18 16:32:41 +05:30
Aman Raj
b18d8bb5e6 [auth] UI improvements 2024-12-18 16:21:17 +05:30
Aman Raj
91aea808f5 [auth] show icon on the top center 2024-12-18 16:20:09 +05:30
Aman Raj
a6590c29d5 [auth] added figma_squircle package to clip icon on edit page 2024-12-18 16:19:22 +05:30
ashilkn
b139dea7ff [mob][photos] Make code cleaner 2024-12-18 15:51:50 +05:30
ashilkn
80857d5441 [mob][photos] Use better icon for switching to media_kit on video player 2024-12-18 15:40:09 +05:30
Manav Rathi
1fb9a7e6c4 [desktop] Add some temporary debug traces (#4435) 2024-12-18 14:32:46 +05:30
Manav Rathi
2bc1c90637 [desktop] Add some temporary debug traces 2024-12-18 14:31:55 +05:30
Neeraj Gupta
23a33610ee [auth] Update feature request url (#4434)
## Description

## Tests
2024-12-18 14:18:28 +05:30
Neeraj Gupta
a6cd937347 [auth] Update feature request url 2024-12-18 14:02:11 +05:30
Neeraj Gupta
7f3d0a5328 Add comment 2024-12-18 13:19:32 +05:30
mangesh
40d938b6a3 [docs][web-app]: rewrite web-app hosting guide (#4424)
rewrites the web-app hosting guide on help.ente.io/self-hosting.
Includes steps for building the Dockerfile and also additionally
includes the pm2 setup, perhaps Docker is marked "Recommended" to avoid
unnecessary variables which "might" (likely won't) show up in the pm2
setup.
2024-12-18 13:12:47 +05:30
Neeraj Gupta
423a669cff [sever] Bump db migration query 2024-12-18 13:12:16 +05:30
Neeraj Gupta
4546d60e61 Merge remote-tracking branch 'origin/main' into video_file_preview 2024-12-18 13:09:19 +05:30
Aman Raj
735f5e3d3c [auth] Change title of custom_icon page 2024-12-18 12:07:32 +05:30
Aman Raj Singh Mourya
7cf7443177 [auth] Export code as html (#4426) 2024-12-18 11:55:24 +05:30
mngshm
d66aa25ee7 fix: minor typos and some additions 2024-12-18 10:21:25 +05:30
ashilkn
0d920a35e7 [mob][photos] Remove unused code 2024-12-17 21:37:00 +05:30
ashilkn
38860d91d3 [mob][photos] Make '?' icon for switching to media_kit player more noticeable 2024-12-17 21:09:39 +05:30
Aman Raj
941b326328 [auth] add notes & secret to html export file 2024-12-17 21:08:14 +05:30
ashilkn
6851d0fae5 [mob][photos] Extract strings 2024-12-17 21:05:46 +05:30
ashilkn
42dc8a451b [mob][photos] bump up to v0.9.72 2024-12-17 20:56:35 +05:30
ashilkn
8e2f052ac3 Merge branch 'main' into use_media_kit_for_unsupported_videos 2024-12-17 20:55:55 +05:30
Manav Rathi
087f34304b [web] Dedup like mobile - WIP, Part x/x (#4427) 2024-12-17 19:21:24 +05:30
Manav Rathi
427c5b4d7d lf 2024-12-17 19:18:24 +05:30
Manav Rathi
bf3a47826b Button wip 2024-12-17 19:17:00 +05:30
Manav Rathi
423ebc6588 Autosizer 2024-12-17 19:11:13 +05:30
ashilkn
9a89153563 [mob][photos] Fix UX/UX issue when a video is opened that has a caption/description 2024-12-17 19:02:25 +05:30
Manav Rathi
606e3013f7 States 2024-12-17 18:34:28 +05:30
Manav Rathi
653ae485a9 Reducer 2024-12-17 18:18:52 +05:30
ashilkn
f681c956ea [mob][photos] UX improvement on switching to media kit player from native video player 2024-12-17 18:02:37 +05:30
ashilkn
4422b4a7b0 [mob][photos] Automatically change to media kit if video not playable on ios + let the user manually switch to media kit 2024-12-17 17:58:05 +05:30
Manav Rathi
926b5de6cd Reduce 2024-12-17 17:35:16 +05:30
Manav Rathi
41de48c454 State wip 2024-12-17 17:21:43 +05:30
mngshm
2f3f48f4db remove: unintended copy-pasted text 2024-12-17 17:08:54 +05:30
Manav Rathi
71ea266f9a Dup 2024-12-17 17:01:31 +05:30
Aman Raj
af187a3c0c [auth] improve UI of HTML file + code refractor 2024-12-17 16:49:29 +05:30
Manav Rathi
11d32752d4 back 2024-12-17 16:29:42 +05:30
Manav Rathi
8a3b0d956e Banner 2024-12-17 16:03:26 +05:30
Manav Rathi
183321fa18 [web] New translations (#4422)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-12-17 15:59:40 +05:30
Neeraj Gupta
96d9c6d5ee [auth] Bump version v4.1.7 (#4425)
## Description

## Tests
2024-12-17 15:55:32 +05:30
Neeraj Gupta
728cd31210 [auth] Bump version v4.1.7 2024-12-17 15:54:44 +05:30
Neeraj Gupta
9491310bfd [auth] Add Support for Custom Icons (#4395)
## Description
This PR introduces a new feature allowing users to select and assign
custom icons to their codes.
2024-12-17 15:53:39 +05:30
Neeraj Gupta
1978226fce [auth] Sort by natural order (#4423)
## Description
Resolves https://github.com/ente-io/ente/issues/4420 &
https://github.com/ente-io/ente/issues/4371

## Tests
2024-12-17 15:52:54 +05:30
mngshm
956e74533e fix: remove commented guide 2024-12-17 15:14:58 +05:30
mngshm
1b5e6174f1 [docs][web-app]: rewrite web-app hosting guide 2024-12-17 15:13:53 +05:30
Aman Raj
8fc9ff0d9f [auth] minor fix 2024-12-17 15:06:31 +05:30
Neeraj Gupta
8e6330dfdb Fix sorting 2024-12-17 14:46:13 +05:30
Neeraj Gupta
eec4bbde98 Lint fix 2024-12-17 14:08:57 +05:30
Neeraj Gupta
b12371437f [auth] Extract strings 2024-12-17 14:02:29 +05:30
Neeraj Gupta
8219177c1c [auth] Sort by natural order 2024-12-17 14:01:52 +05:30
Manav Rathi
56be41c38f Up 2024-12-17 13:52:01 +05:30
Manav Rathi
5b371380fd Conv raw h1 2024-12-17 13:44:59 +05:30
Neeraj Gupta
eec060ae71 Fixed typos 2024-12-17 13:37:34 +05:30
Neeraj Gupta
70ec18462b Add icon back 2024-12-17 13:36:06 +05:30
Neeraj Gupta
b3cf07f232 Merge remote-tracking branch 'origin/main' into video_file_preview 2024-12-17 13:34:24 +05:30
Neeraj Gupta
2f3639fbbc Clean up git 2024-12-17 13:33:34 +05:30
Manav Rathi
c1ac9d22ba wip 2024-12-17 13:30:37 +05:30
Manav Rathi
3fdfa10402 new 2024-12-17 13:16:57 +05:30
Crowdin Bot
6b49a889da New Crowdin translations by GitHub Action 2024-12-17 06:07:44 +00:00
Manav Rathi
431ad61ca2 [web] Use purpose to distinguish signup / login (#4421) 2024-12-17 11:36:47 +05:30
Manav Rathi
75456c1b34 lf 2024-12-17 11:32:36 +05:30
Manav Rathi
45b490cb43 Specific 2024-12-17 11:24:42 +05:30
Manav Rathi
1f4aebf20f tr 2024-12-17 11:19:55 +05:30
Manav Rathi
e639aa9306 Don't pass a purpose during recover since we're not handling the error 2024-12-17 11:09:39 +05:30
Manav Rathi
5ce96fde3e Signup 2024-12-17 11:04:55 +05:30
Manav Rathi
a91027c335 Generic 2024-12-17 10:59:09 +05:30
Manav Rathi
1ad7ba82c2 Tweak 2024-12-17 10:48:01 +05:30
Manav Rathi
b5d274f7ae Save state only if we can proceed 2024-12-17 10:46:52 +05:30
Manav Rathi
35f710439f Split errors 2024-12-17 10:41:42 +05:30
Manav Rathi
bb2072aafe Don't show arbitrarily long lower level errors in the UI 2024-12-17 10:31:09 +05:30
Manav Rathi
479f172e4d Limit box width 2024-12-17 10:29:01 +05:30
Manav Rathi
4383841ef1 Use 2024-12-17 09:47:10 +05:30
Manav Rathi
57a00c1703 purp 2024-12-17 09:37:35 +05:30
Manav Rathi
9b292bbd80 X-Client-Package determines this 2024-12-17 09:33:59 +05:30
Manav Rathi
8ffb52dd7e Upd wip 2024-12-17 09:32:59 +05:30
Vishnu Mohandas
a9545c3bef [docs] Add a tip about enabling ML before doing imports (#4412) 2024-12-16 07:52:46 -08:00
Manav Rathi
b0f1cea9ef [desktop] Include the disk file count in the export logs (#4417) 2024-12-16 20:34:18 +05:30
Manav Rathi
2c9cff040d [desktop] Include the disk file count in the export logs 2024-12-16 20:18:55 +05:30
Manav Rathi
9aaee77004 [desktop] Add workaround for back button on Stripe checkout (#4416)
Fixes: https://github.com/ente-io/ente/issues/4358
2024-12-16 19:41:00 +05:30
Manav Rathi
9ac61d063a [desktop] Add workaround for back button on Stripe checkout
Fixes: https://github.com/ente-io/ente/issues/4358
2024-12-16 19:37:01 +05:30
Ashil
3e205ac275 [mob][photos] Log device brand and model (#4413) 2024-12-16 17:00:29 +05:30
Aman Raj
277d7fa0cd [auth] fixed height & width to display icon 2024-12-16 16:26:49 +05:30
Aman Raj
51734d96d5 [auth] minor fixes 2024-12-16 16:25:54 +05:30
ashilkn
c4880fd07e [mob][photos] Log device brand and model 2024-12-16 16:11:57 +05:30
Aman Raj
75ae277334 [auth] minor fixes 2024-12-16 16:00:40 +05:30
Aman Raj
726cfc8bf2 [auth] rearrange widgets 2024-12-16 16:00:17 +05:30
Aman Raj
6b6db069b0 [auth] fix: showing duplicate icons on custom_icon screen 2024-12-16 15:58:18 +05:30
Manav Rathi
1459678d70 [docs] Add a tip about enabling ML before doing imports 2024-12-16 14:58:48 +05:30
Manav Rathi
ce3e8bf315 [web] New translations (#4353)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-12-16 14:41:59 +05:30
Neeraj Gupta
adaf70695b [server] Upgrade go version to 1.23 (#4409)
## Description

## Tests
2024-12-16 13:44:28 +05:30
Neeraj Gupta
f1e17948c4 [server] Lint fix 2024-12-16 13:42:11 +05:30
Neeraj Gupta
abeac7aa49 [server] Upgrade go version to 1.23 2024-12-16 13:38:53 +05:30
Ivan Lepekha
d46b7a8189 [auth] Fixing taskbar overlapping window panel (#4384)
## Description

Pull request was made because of some user percentage has taskbar
connected on top, so it overlaps auth window for WinApp at start.
After some measuring, I found that taskbar occupies:

- 50px on FHD with 125% scaling (standard values on some notebooks)
- 40px on FHD with 100% scaling
- 30px on FHD with 100% scaling and small taskbar icons
2024-12-16 13:21:02 +05:30
Vishnu Mohandas
d312761166 Update README.md (#4408)
## Description

## Tests
2024-12-16 11:23:45 +05:30
Vishnu Mohandas
c29d857b83 Update README.md 2024-12-16 11:23:15 +05:30
Neeraj Gupta
7e79c9d847 Update README.md 2024-12-16 11:09:31 +05:30
Neeraj Gupta
55d0a1a0b5 [mobile] New translations (#4406)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-12-16 10:55:09 +05:30
Neeraj Gupta
6e14a3af09 [auth] New translations (#4407)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-12-16 10:49:14 +05:30
mngshm
7ce5306f53 minor edits 2024-12-16 10:11:18 +05:30
Vishnu Mohandas
34e6e71b34 Return empty list (#4402) 2024-12-16 09:37:48 +05:30
Crowdin Bot
3fd4717ec4 New Crowdin translations by GitHub Action 2024-12-16 01:18:00 +00:00
Crowdin Bot
20acf7c0bf New Crowdin translations by GitHub Action 2024-12-16 01:05:37 +00:00
Crowdin Bot
46e764d3db New Crowdin translations by GitHub Action 2024-12-16 00:38:41 +00:00
vishnukvmd
c6faaf8aa9 Return empty list 2024-12-14 10:27:44 -08:00
Aman Raj Singh Mourya
f5e77d8b23 [auth] fix missing [ ] in altNames in custom-icons.json (#4401)
## Description
Debug build failing due missing [ ] in altNames in the custom-icon.json
from PR [https://github.com/ente-io/ente/pull/4348/files]()
Code Ref:
https://github.com/ente-io/ente/blob/main/auth/assets/custom-icons/_data/custom-icons.json#L639
2024-12-14 22:15:54 +05:30
Aman Raj
449c966342 [auth] fix missing [ ] in altNames in custom-icons.json 2024-12-14 22:02:04 +05:30
Aman Raj Singh Mourya
ca02c20d09 [auth] Remove duplicate code (#4383) 2024-12-14 08:32:39 +05:30
Aman Raj
8870a8ec4a [auth] minor fix 2024-12-13 20:44:10 +05:30
mngshm
4150e607eb minor:add improvements to external s3 guide 2024-12-13 16:58:20 +05:30
Aman Raj
0a5d31da18 [auth] fix: move class AllIconData to models 2024-12-13 14:49:43 +05:30
Neeraj Gupta
e3d3f3b1f4 [auth] New translations (#4355)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-12-13 14:46:26 +05:30
Ashil
062a7fe257 [mob][photos] Minor UI fix (#4396) 2024-12-13 14:40:47 +05:30
ashilkn
442cf6583b [mob][photos] Minor UI fix 2024-12-13 14:39:47 +05:30
k3kk07
7bc38a061d Updated randstad icon (#4363)
## Description
Updated randstad icon
## Tests
2024-12-13 14:21:20 +05:30
Neeraj Gupta
fd04cd0a98 Fix #4296 + download UI improvement + fixes (#4369)
## Description

### Background 
Proposal to fix #4296 (@ua741). High level, there is a race condition
which is generating wrong entries in the FilesDB (creating orphan
files). This issue is easily replicable if you select multiple files and
try to download them (the more files, the more likely wrong entries will
be created). This issue is also messing up with the date of the files we
see in the timeline and is creating "orphan" (not linked to uploaded
files) files in the device collections.

To my understanding, this is quite a critical bug and any user is very
likely to encounter it in the current implementation.

There is some self healing already in place that will reupload all those
files and this should correct the dates, but this will only do it 10
files at a time, and based on potential candidates, without fixing the
orphan entries. I was also able to produce files which were never
corrected.

### This pull request
After extensive tests and lots of debugging, I was able to fully fix
this issue (meaning I am not able to reproduce it, at all, and I tried a
lot..). I also do not see any orphan in the device collection
("Pictures" folder for Android), while i could see 20+ (even more) each
time I was trying to replicate the issue. To fix it, I have:

- created a new class `PhotoManagerSafe` which is safely making sure
that the app will not react to file changes when it has been asked not
to do so (previous implementation allowed scenarios where a caller was
executing code thinking no change notification would be sent).
- created a Lock in the `LocalSyncService` that is used to make sure no
local synchronisation can be performed at the same time a download is
performed (this was the main culprit). The main side effect is that when
you download multiple files, they will be processed sequentially. I
think this can be improved but the main "side" advantage is that
whenever there is a failure, not a lot will be lost and it is more
robust in that way if you want to download a big collection. It would be
better to have at least 2 threads downloading/decrypting at the same
time, maybe (maybe not needed as well)?
- improved the "Downloading files..." dialog, which is now showing the
progress (for example "Downloading files... (235/494)"), so that the
user knows if something is actually happening and what is the current
progress.
- Added a missing call on the Video Editor page where the change notify
was stopped but never started again at the end when task was performed.

Feel free to close this PR if not suitable according to you, I can also
take feedback and try to implement them as best as I can.

## Tests

Tested on my Pixel 6a

Built with :

Flutter 3.24.3
JDK 17.0.2
Gradle 7.2
2024-12-13 14:17:34 +05:30
Neeraj Gupta
1a80c40f78 [auth] Add icons for Nelnet, US Mobile (#4389)
## Description

Custom icons for Nelnet and US Mobile
2024-12-13 14:16:28 +05:30
Neeraj Gupta
19441d9fee [auth] Lint rule to validate file size (#4394)
## Description

## Tests
2024-12-13 14:14:39 +05:30
Neeraj Gupta
826b2f997e [auth] Reduce icon sizes 2024-12-13 14:11:50 +05:30
Neeraj Gupta
747bf88515 [auth] Lint on file size 2024-12-13 14:11:26 +05:30
Aman Raj
5175f24402 [auth] fix: change the selectedItemCount 2024-12-13 13:37:32 +05:30
Simon Dubrulle
32ed84f48d Moved getFile() outside lock + Implemented simple Download queue 2024-12-13 08:34:52 +01:00
Vishnu Mohandas
ca40492d99 Remove bold (#4393) 2024-12-13 12:44:18 +05:30
vishnukvmd
c220e0385a Update 2024-12-12 23:13:13 -08:00
vishnukvmd
df9c08cd7f Remove bold 2024-12-12 23:08:08 -08:00
Neeraj Gupta
a7cd7030f1 [server] Fix recovery email (#4392)
## Description

## Tests
2024-12-13 12:37:04 +05:30
Neeraj Gupta
113fbef0d9 [server] Fix recovery email 2024-12-13 12:31:12 +05:30
Neeraj Gupta
af23fd37b2 [docs] Adding help article for Legacy (#4390)
## Description

## Tests
2024-12-13 12:24:31 +05:30
setalp
6dc2f6139a Update sidebar.ts 2024-12-13 12:23:09 +05:30
setalp
665ba9e634 Update initiate_account_recovery.png 2024-12-13 12:07:51 +05:30
Neeraj Gupta
acd2f63a87 [server] Send emails for legacy (#4391)
## Description

## Tests
2024-12-13 12:05:38 +05:30
Neeraj Gupta
58ae5eee32 Update from address 2024-12-13 12:01:35 +05:30
Neeraj Gupta
eaee515e17 Update templates 2024-12-13 12:01:06 +05:30
Neeraj Gupta
3be7c4a60f Update templates 2024-12-13 11:49:26 +05:30
setalp
84e39c43d6 Adding help article for Legacy 2024-12-13 11:45:35 +05:30
Neeraj Gupta
7f0d07db3f [auth] Add custom icon for DreamHost (#4381)
This is my first PR for this repo; please let me know if I've done
anything incorrectly. I've got a couple other icons to submit if this
one looks good.
2024-12-13 11:41:44 +05:30
Aaron Sherber
0fd6eceda6 Add icons for Nelnet, US Mobile 2024-12-12 22:18:47 -05:00
Aman Raj
f439d805fc [auth] extract strings 2024-12-12 20:27:13 +05:30
Aman Raj Singh Mourya
0e98ef43df [auth] Save button on reorder screen (#4382) 2024-12-12 15:36:56 +05:30
Neeraj Gupta
38d679f574 [server] Clean up emergency contacts on account deletion 2024-12-12 15:32:10 +05:30
Aman Raj
be92c30bb1 Merge branch 'main' into save_button_reorder_screen 2024-12-12 15:06:55 +05:30
Neeraj Gupta
c648127ff8 [server] Reject/Stop active recovery when contact is removed 2024-12-12 14:53:08 +05:30
Aman Raj
209bdf3f0b [auth] remove unused variables 2024-12-12 14:46:38 +05:30
Aman Raj
257344f2e5 [auth] Added save button on appbar to save the updated code order 2024-12-12 14:45:14 +05:30
Neeraj Gupta
cbe105020b Update emails 2024-12-12 14:21:32 +05:30
Aman Raj
0e33013cec [auth] UI fix 2024-12-12 12:46:06 +05:30
Neeraj Gupta
9c0426d716 [server] Update contact emails 2024-12-12 11:27:58 +05:30
Neeraj Gupta
35de887624 [server] Update contact emails 2024-12-12 11:27:52 +05:30
Aaron Sherber
d81c545423 Add custom icon for DreamHost 2024-12-11 19:51:43 -05:00
Neeraj Gupta
c499df4212 [mob] Fix copy (#4380)
## Description

## Tests
2024-12-11 21:11:44 +05:30
Neeraj Gupta
e0d462ec75 [mob] Fix copy 2024-12-11 21:11:19 +05:30
ashilkn
e81986a27c [mob][photos] Fix NaN exception 2024-12-11 20:13:23 +05:30
ashilkn
27c66ce2f7 [mob][photos] Chore 2024-12-11 19:57:46 +05:30
Aman Raj
c80f64943d [auth] UI implementation 2024-12-11 18:35:27 +05:30
Aman Raj
5326c7452b [auth] impelmented logic to find duplicate code 2024-12-11 18:35:03 +05:30
Aman Raj
38023d0ab1 [auth] add new tile to navigate to duplicate code screen 2024-12-11 18:34:06 +05:30
ashilkn
401ed5bf9c [mob][photos] Improve media_kit player's video control UX (3) 2024-12-11 17:35:18 +05:30
Neeraj Gupta
6cc6d2521a [mob] Bump version v0.9.70 (#4376)
## Description

## Tests
2024-12-11 17:25:11 +05:30
Neeraj Gupta
553276828c [mob] Bump version v0.9.70 2024-12-11 17:24:29 +05:30
ashilkn
e5743fceed [mob][photos] Improve media_kit player's video control UX (2) 2024-12-11 17:21:51 +05:30
Neeraj Gupta
b6d9527f1d [server] Update template 2024-12-11 16:23:40 +05:30
Neeraj Gupta
64594c5077 Merge remote-tracking branch 'origin/main' into s_emails 2024-12-11 16:12:31 +05:30
Neeraj Gupta
56e3f23a56 [mob] Copy and UX improvements (#4375)
## Description

## Tests
2024-12-11 16:12:20 +05:30
Neeraj Gupta
12927b6f82 [server] Send recovery emails 2024-12-11 16:08:27 +05:30
Neeraj Gupta
92208b7d21 [server] Send legacy invites 2024-12-11 15:25:54 +05:30
Neeraj Gupta
e4c35b404e [server] Support for sending mail with base template 2024-12-11 15:24:00 +05:30
Simon Dubrulle
e9a8449a64 Implemented first PR feedbacks: removed PhotoManagerSafe not needded with LocalSyncService lock 2024-12-11 10:14:52 +01:00
Neeraj Gupta
575d220b31 Lint fix 2024-12-11 13:35:58 +05:30
Neeraj Gupta
4d280fd14b Merge remote-tracking branch 'origin/main' into ev_2 2024-12-11 13:13:14 +05:30
ashilkn
22e4f6bc94 [mob][photos] Improve media_kit player's video control UX 2024-12-11 11:45:16 +05:30
ashilkn
ca95ea8de2 [mob][photos] Make seekbar work for new media_kit controls 2024-12-11 10:58:15 +05:30
Vishnu Mohandas
d1625361d7 Copy changes (#4370) 2024-12-10 22:29:09 +05:30
vishnukvmd
7aedfb7e9b Copy changes 2024-12-10 08:58:27 -08:00
Neeraj Gupta
00b722a0a5 [mob] Bump version 2024-12-10 21:21:09 +05:30
Neeraj Gupta
9da5f6c99d [mob] Add confirmation while adding trusted contact 2024-12-10 21:20:43 +05:30
Neeraj Gupta
fbf2a2bb23 [mob] Copy changes 2024-12-10 20:59:28 +05:30
Neeraj Gupta
e6a2cb0e57 [mob] Copy change 2024-12-10 20:53:17 +05:30
ashilkn
61e1ea4f42 [mob][photos] Create new seekbar, duration and time elapsed for new media_kit controls 2024-12-10 20:45:58 +05:30
Neeraj Gupta
1547b04ddf [mob] UX improvement 2024-12-10 20:37:44 +05:30
Simon Dubrulle
9658cde381 Fixed incoherent message format in download dialog 2024-12-10 14:34:56 +01:00
ashilkn
dec2ee7202 [mob][photos] Start creating new controls (play pause button is done), similar to controls of native player. 2024-12-10 18:01:55 +05:30
Simon Dubrulle
0cb79102fd Creation of PhotoManagerSafe + lock in LocalSyncService + improved download UI + missing notify call 2024-12-10 13:25:00 +01:00
ashilkn
2e2e381100 [mob][photos] Create a new widget that uses native_video_player for video playback by default and toggles to use media_kit for playback when UseMediaKitForVideo event is fired 2024-12-10 16:09:59 +05:30
Neeraj Gupta
815d9e8972 [mob] Recovery copy changes 2024-12-10 15:52:38 +05:30
ashilkn
5893c927c2 [mob][photos] Rename old video player 2024-12-10 15:48:36 +05:30
Neeraj Gupta
da89c02505 Copy changes 2024-12-10 15:47:30 +05:30
Neeraj Gupta
3d58a8cf5a [mob] Bump version 2024-12-10 15:35:59 +05:30
Neeraj Gupta
33c497e101 [mob] Copy change 2024-12-10 15:13:36 +05:30
Neeraj Gupta
0ec493836c Merge remote-tracking branch 'origin/main' into ev_2 2024-12-10 15:00:55 +05:30
Neeraj Gupta
e5ccf494c5 [mob] Bump version 2024-12-10 14:47:10 +05:30
Neeraj Gupta
8692421b9a [mob] Recovery contact (#4366)
## Description

## Tests
2024-12-10 14:45:06 +05:30
Neeraj Gupta
7b85d216dd [mob] Legacy UX fixes 2024-12-10 14:34:17 +05:30
Neeraj Gupta
ebf92dba94 [mob] Allow internal user to approve recovery for testing 2024-12-10 13:43:25 +05:30
Neeraj Gupta
c4799a719b [server] Fix next reminder time 2024-12-10 13:38:39 +05:30
Neeraj Gupta
1222a063e8 Add support for approving recovery 2024-12-10 13:33:18 +05:30
Neeraj Gupta
c5c77ab706 Lint fixes 2024-12-10 13:29:04 +05:30
Neeraj Gupta
7952257a89 Fix server status 2024-12-10 11:45:24 +05:30
Neeraj Gupta
8db40c5c58 extract strings 2024-12-10 11:24:27 +05:30
Neeraj Gupta
051b197180 [mob] Legacy UX Changes 2024-12-10 10:54:47 +05:30
Neeraj Gupta
a46dd1f447 [mob] Legacy UX changes 2024-12-10 10:26:10 +05:30
Tanguy
394d98ca46 [auth] Optimize Kotas icon (#4364)
## Description

- Optimize `kotas.svg` size.
- Add `mix-blend-mode:difference` property for light/dark theme.
- Remove redundant slug in `custom-icons.json`.
2024-12-10 06:47:31 +05:30
Neeraj Gupta
1cf5875a6f Merge remote-tracking branch 'origin/main' into emergency_contact 2024-12-10 06:45:55 +05:30
Neeraj Gupta
77856f2b6d [mob] Copy update 2024-12-10 00:33:43 +05:30
Sven
7b689f4197 Add Kotas icon (#4361)
## Description

Adds the icon for Kotas ([kotas.com.br](https://kotas.com.br)) to Auth
2024-12-09 23:26:26 +05:30
ashilkn
25a3ce2909 Merge branch 'main' into native_video_player_pkg_debug 2024-12-09 18:16:33 +05:30
ashilkn
5d474350c2 [mob][photos] Reference fork of native_video_player package to get notified if video isn't playable on iOS 2024-12-09 18:04:05 +05:30
Neeraj Gupta
5aa2527021 [server] Change default emergency notice to 30 days 2024-12-09 13:08:30 +05:30
Neeraj Gupta
eb203a075f [mobile] New translations (#4354)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-12-09 12:13:31 +05:30
Neeraj Gupta
23172343fb Update json for custom icons (#4348)
## Description
Update json for custom icons for an error and add new nord account icon.
## Tests
2024-12-09 12:12:57 +05:30
Neeraj Gupta
7adecbeb60 [AUTH] Optimized Large SVG Files (#4350)
**Digifinex**: Reduced file size from 6264KB to 1KB.
**Bybit**: Reduced file size from 1358KB to 3KB and made SVG responsive
for both dark and light themes.
**ClouDNS**: Reduced file size from 242KB to 7KB.
2024-12-09 12:11:57 +05:30
Ashil
f91aee39d9 [mob][photos] Bump up to v0.9.66 (#4357) 2024-12-09 12:11:25 +05:30
ashilkn
168e00f300 [mob][photos] Bump up to v0.9.66 2024-12-09 11:25:54 +05:30
Crowdin Bot
62469dec0b New Crowdin translations by GitHub Action 2024-12-09 01:17:50 +00:00
Crowdin Bot
0d8d17a170 New Crowdin translations by GitHub Action 2024-12-09 01:05:17 +00:00
Murat Karayel
91a93e1a6e Merge branch 'ente-io:main' into main 2024-12-09 01:36:34 +03:00
schipht
c6ecfcb319 optimize svg files 2024-12-09 01:33:17 +03:00
k3kk07
d0c2a9ce1b New icon NordAccount added 2024-12-08 20:03:56 +01:00
k3kk07
1dd98fcf71 Merge branch 'ente-io:main' into main 2024-12-08 19:50:14 +01:00
Neeraj Gupta
a7f6d1a484 [AUTH] binance variants + wargamingnet fix (#4344) 2024-12-08 05:16:15 +05:30
schipht
3d7166700d binance variants + wargamingnet fix 2024-12-08 01:45:51 +03:00
Neeraj Gupta
92c476cb6f [auth] Bump version (#4341)
## Description

## Tests
2024-12-07 21:34:48 +05:30
Neeraj Gupta
3048d7c4b8 [auth] Bump version 2024-12-07 21:34:24 +05:30
Aman Raj
ff41f1c7f8 [auth] changes to display new icon on code_widget 2024-12-07 17:41:59 +05:30
Aman Raj
2fc2107bca [auth] implemented custom icon screen 2024-12-07 17:41:15 +05:30
Aman Raj
0e80508f62 [auth] Implemented custom icon widget 2024-12-07 17:40:53 +05:30
Aman Raj
ee7c7a447d [auth] UI to select option for custom icons 2024-12-07 17:40:34 +05:30
Aman Raj
16e8aa3803 [auth] add parameter to store details for custom icons 2024-12-07 17:40:02 +05:30
k3kk07
6b330a9906 Update custom-icons.json 2024-12-06 19:16:47 +01:00
Neeraj Gupta
e6fa7d4e21 [server] Migrate server changes for emergency contact 2024-12-06 21:41:28 +05:30
Neeraj Gupta
0e677f052b [mob] Move trusted contact code from old repo 2024-12-06 21:02:24 +05:30
Neeraj Gupta
5c4c489912 [mob] Add strings 2024-12-06 20:50:58 +05:30
Neeraj Gupta
58a00a8758 [mob] Add model 2024-12-06 20:48:43 +05:30
Neeraj Gupta
b9d6864e22 [auth][docs] Add Aegis Authenticator Authy Export instructions (#4314)
Reasoning: I encountered some console errors trying to export from Authy
using the first method described in the existing documentation. After a
bunch of research I found that Aegis Authenticator can import from the
same device and it worked like a charm, so I hope other people can use
this method as well.
2024-12-06 15:43:26 +05:30
Neeraj Gupta
f4ae309151 [cli] adds some checks for env vars and reference to cli secrets doc. (#4303) 2024-12-06 15:42:50 +05:30
Neeraj Gupta
7a5745fd78 [mobile] New translations (#4277)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-12-06 15:42:34 +05:30
Neeraj Gupta
d81caf1ad2 [auth] Fixed bad custom icon json & altName matching (#4328)
## Description

Fixes https://github.com/ente-io/ente/issues/3875

## Tests
2024-12-06 15:05:38 +05:30
Neeraj Gupta
b7252c64cf [auth] Lint fixes 2024-12-06 14:55:11 +05:30
Neeraj Gupta
bd7ea10253 [auth] Rethrow icon parsing exception in debugMode 2024-12-06 14:49:48 +05:30
Neeraj Gupta
70f0a4f46c [auth] Update icon for uniquiti 2024-12-06 14:48:51 +05:30
Neeraj Gupta
6d7c8fd9a9 [auth] Upgrade flutter svg 2024-12-06 14:48:12 +05:30
Neeraj Gupta
42e455bfdd [auth] Fixed custom json 2024-12-06 14:47:35 +05:30
mngshm
0b7f73950c remove unnecessary variable 2024-12-06 14:14:26 +05:30
Neeraj Gupta
65479edc9b [auth] Fix theme switch for windows & linux (#4327)
## Description
Fixes https://github.com/ente-io/ente/issues/4293
## Tests
2024-12-06 14:05:13 +05:30
Neeraj Gupta
3a6001701e [auth] Fix theme switch for windows & linux 2024-12-06 14:04:34 +05:30
Neeraj Gupta
2bdcdece7b [auth] Bump version v4.1.5 (#4326)
## Description

## Tests
2024-12-06 13:00:39 +05:30
Neeraj Gupta
7a9b30ac7a [auth] Bump version v4.1.5 2024-12-06 13:00:19 +05:30
Neeraj Gupta
b1312bd161 [auth] Revert pin to favorite change (#4325)
## Description

## Tests
2024-12-06 12:57:59 +05:30
k3kk07
16d858e52e Add new icons (#4322)
## Description
New icon added and json modified accordingly
## Tests
2024-12-06 12:53:37 +05:30
Neeraj Gupta
2b4d47d2f6 [auth] Bump version 2024-12-06 12:51:39 +05:30
Neeraj Gupta
34a04dd29a [auth] Reduce freq of update notification dialog 2024-12-06 12:51:14 +05:30
Neeraj Gupta
60bb28668d [auth] Hide pin concept in custom sort mode 2024-12-06 12:45:12 +05:30
Neeraj Gupta
95127e6bcd [auth] Revert pin to favorite change 2024-12-06 12:03:25 +05:30
mngshm
8d644ead1e [cli]delete: keyring availability check 2024-12-06 10:07:53 +05:30
Neeraj Gupta
7cbc486345 fixes minor typo in docker-compose comments (#4323)
## Description
Fixes one small typo in the docker-compose code

## Tests
N/A
2024-12-06 10:04:08 +05:30
Ashil
4c30870df7 [mob][photos] Fix safe area issues (#4321)
## Description

Resolves #3805
2024-12-06 09:58:42 +05:30
Zayd
0fe23817cc fixes minor typo in docker-compose comments 2024-12-05 15:04:33 -08:00
ashilkn
dcc5cb9bee [mob][photos] Fix safe area issue in image editor 2024-12-05 19:53:27 +05:30
ashilkn
b6df7bf969 [mob][photos] Fix selection actions sheet being under android system nav bar 2024-12-05 19:45:38 +05:30
mngshm
4289005302 [cli]fix: add func to check keyring availabilitye 2024-12-05 17:24:21 +05:30
Neeraj Gupta
3950d51b86 [auth] Minor fixes for custom order (#4319)
## Description

## Tests
2024-12-05 16:56:08 +05:30
Neeraj Gupta
792ffbbdac [auth] Bump version 4.1.4 2024-12-05 16:52:13 +05:30
Ashil
7c00863663 [mob][photos] Fix clipping of TextInputWidget (#4318)
## Description

#### Before
Text is clipped more towards the right end
<img width="312" alt="Screenshot 2024-12-05 at 4 18 49 PM"
src="https://github.com/user-attachments/assets/56577526-defb-4c03-a31c-03a34283c886">


#### After

<img width="312" alt="Screenshot 2024-12-05 at 4 17 36 PM"
src="https://github.com/user-attachments/assets/add18d28-6d75-4cf0-9c6d-1924f70b699d">
2024-12-05 16:33:42 +05:30
ashilkn
1cdaf7e023 [mob][photos] Minor UI improvements to TextInputWidget 2024-12-05 16:14:10 +05:30
ashilkn
98c604a73e [mob][photos] Fix clipping of TextInputWidget toward the right end when there is no suffix icon 2024-12-05 16:08:42 +05:30
Neeraj Gupta
aa4e1b8165 [auth] Show edit icon for custom order 2024-12-05 15:58:15 +05:30
Neeraj Gupta
25548e8850 [auth] Change copy 2024-12-05 15:53:42 +05:30
Neeraj Gupta
1e95c6833a [auth] Go to change order on custom is already selected 2024-12-05 15:51:03 +05:30
Neeraj Gupta
a78cd0e70f [auth] Copy change 2024-12-05 15:43:45 +05:30
Ashil
ab80128690 [mob][photos] Remove 'Descriptions' section from search tab (#4317) 2024-12-05 15:20:34 +05:30
ashilkn
df7071a130 [mob][photos] Remove unused extensions on String 2024-12-05 15:17:37 +05:30
ashilkn
ceeac4222e [mob][photos] Remove 'Descriptions' section from search tab 2024-12-05 15:12:03 +05:30
Neeraj Gupta
a92e74d65c [auth] Fix search for fav enteries 2024-12-05 13:15:32 +05:30
Neeraj Gupta
239e6d3131 [auth] Keep favorite enteries on top in all cases except custom sort (#4316)
## Description

## Tests
2024-12-05 12:06:45 +05:30
Neeraj Gupta
c7b031272a [auth] Bump version 4.1.3 2024-12-05 11:58:09 +05:30
Neeraj Gupta
6d9dbcb952 [auth] Keep fav enteries at top for non-custom order 2024-12-05 11:57:15 +05:30
Neeraj Gupta
77f30b38af [auth] Add padding for fav icon 2024-12-05 11:48:01 +05:30
Neeraj Gupta
00f13f585f [auth] Use text as lable for favorite 2024-12-05 11:47:03 +05:30
MarvNC
8daf8b1d06 Add Aegis Authenticator Authy Export instructions 2024-12-04 21:17:50 -08:00
Neeraj Gupta
ef39170628 [mob][photos] Fix state issue when reloading avatar (#4311) (#4312)
## Description

- Fixed by adding a key to the PersonGridItem, that way it gets
refreshed when the person is changed

(related issue : #4311)

## Tests
2024-12-05 10:42:15 +05:30
Neeraj Gupta
e5a1624540 [auth] Fix sorting & bump version (#4305)
## Description
Previously sorting was not updating the indexed correctly. Have tested
the changes locally, and verified that correct order is being
maintained. Also, reduced redundant update by passing correctly filtered
list while sorting (only non-trashed and non-error codes)
## Tests
2024-12-05 09:37:31 +05:30
Alexis L
918d03aae9 [mob][photos] Fix state issue when reloading avatar (#4311)
- Fixed by adding a key to the PersonGridItem, that way it gets refreshed when the person is changed
2024-12-04 18:50:13 +01:00
Neeraj Gupta
406ec9c2e4 [auth] Bump version 2024-12-04 16:05:52 +05:30
Vasilis Toumpelis
e9a6af4a29 [auth] Add SpaceHey and Wolvesville icons (#4291)
https://spacehey.com
https://wolvesville.com
2024-12-04 16:01:42 +05:30
Neeraj Gupta
d947dd02cc [auth] Fix custom sort 2024-12-04 15:56:18 +05:30
Neeraj Gupta
7eeeafa03e [auth] Fix sorting + add option to sort by recently and most frequently used (#4304)
## Description

## Tests
2024-12-04 15:03:23 +05:30
Neeraj Gupta
5296665451 [auth] Handle null value 2024-12-04 14:45:52 +05:30
Neeraj Gupta
0814f048a0 [auth] Lint fix 2024-12-04 14:22:12 +05:30
Neeraj Gupta
9a50915678 [auth] Track tapCount & lastUsed in e2ee manner 2024-12-04 14:16:45 +05:30
Neeraj Gupta
c99a465c85 [auth] Show sorting menu on home screen 2024-12-04 13:59:52 +05:30
Neeraj Gupta
1644b1cd89 [auth] Show sort option on home screen 2024-12-04 13:42:22 +05:30
Neeraj Gupta
aa154189a0 [auth] Rename pin/unpin to fav/unfav (#4302)
## Description

## Tests
2024-12-04 13:08:05 +05:30
Neeraj Gupta
4accc796e6 [auth] Fix UI for fav chip on top 2024-12-04 12:29:28 +05:30
mngshm
2b8060fdb7 [doc]minor: add ref link to ENTE_CLI_SECRETS error message 2024-12-04 12:27:45 +05:30
mngshm
1166c6f723 minor: add a note to set environment variables 2024-12-04 12:25:22 +05:30
Neeraj Gupta
94b09acaaa [auth] Rename pin/unpin to fav/unfav 2024-12-04 12:17:13 +05:30
Neeraj Gupta
bc72872f26 [mob][photos] Fix dialog that is supposed to be shown when turning off downloads coming up only when turning on downloads in manage link screen (#4284) 2024-12-04 11:13:17 +05:30
Neeraj Gupta
bdf31e99e2 [auth] Allow only lower_case letter and underscore in custom icon name (#4301)
## Description

## Tests
2024-12-04 10:21:51 +05:30
Neeraj Gupta
1f29efb060 [auth] Fix case issue for git 2024-12-04 10:19:44 +05:30
Neeraj Gupta
689045d06b [auth] Fix case issue for git 2024-12-04 10:18:20 +05:30
Neeraj Gupta
e3a4f419f4 [auth] Move custom icon validation on top 2024-12-04 10:15:21 +05:30
Neeraj Gupta
c4970e9df8 [auth] Fix icon case for git 2024-12-04 10:14:50 +05:30
Neeraj Gupta
2562fd05ae [auth] Rename enom icon 2024-12-04 09:54:17 +05:30
Neeraj Gupta
095c22b565 [auth] Rename existing icons to match lint rule 2024-12-04 09:50:00 +05:30
Neeraj Gupta
71fcce5f01 [auth] Add Lint validation for custom icon name 2024-12-04 09:48:07 +05:30
Ashil
7b002c857e [mob][photos] Fix UX issue with video controls when viewing a video memory (#4294) 2024-12-03 21:35:50 +05:30
ashilkn
a905a1fa44 [mob][photos] Fix UX issue with video controls when viewing a video memory 2024-12-03 21:33:18 +05:30
Manav Rathi
129d110543 [web] Minor refactoring - Move types closer to use (#4290) 2024-12-03 14:27:52 +05:30
Manav Rathi
6160446335 Inline 2024-12-03 14:19:32 +05:30
Manav Rathi
1457440c9f Inline 2024-12-03 14:16:09 +05:30
Manav Rathi
e0fae2e499 Move 2024-12-03 14:07:56 +05:30
Manav Rathi
4ea63940ef [web] auth / fix iteration on Safari (#4289)
.map is not defined on an iterator
2024-12-03 11:47:29 +05:30
Manav Rathi
daba61b69b [web] auth / fix iteration on Safari
.map is not defined on an iterator
2024-12-03 11:43:48 +05:30
Manav Rathi
43848d5618 [auth] Remove duplicated icon (#4288)
There is both `binance.svg` and `Binance.svg`, which cause havoc with
git on macOSes due to case insensitivity. Remove one of the duplicates
(arbitrarily, which one).
2024-12-02 22:59:27 +05:30
Manav Rathi
d40da1c6f5 Remove dupes 2024-12-02 22:55:47 +05:30
Prateek Sunal
759f600ca6 [auth][migration] migrate db correctly (#4250)
## Description

Migration was failing for windows, this will fix the migration for newer
releases.

## Tests
2024-12-02 22:24:56 +05:30
ashilkn
6544f0b839 [mob][photos] Fix dialog that is supposed to be shown when turning off downloads coming up only when turning on downloads in manage link screen 2024-12-02 20:03:19 +05:30
Prateek Sunal
c1ea512355 [auth][ios] fix compatibility for ios < 13 (#4252)
## Description

fix compatibility for ios < 13 and ios >=12

Reference:
https://stackoverflow.com/questions/57907817/dyld-library-not-loaded-swiftui-when-app-runs-on-ios-12-using-availableios-13

## Tests

Co-authored-by: Prateek Sunal <prateekmedia@users.noreply.github.com>
2024-12-02 18:41:27 +05:30
0xedward
9055eee0a6 [auth] Add Bugzilla icon (#4243)
https://www.bugzilla.org/assets/img/logo-header.svg
2024-12-02 18:40:10 +05:30
0xedward
6fb2e2966c Add Pushover icon (#4242)
Logo from https://pushover.net/images/pushover-logo.svg
2024-12-02 18:39:36 +05:30
Manav Rathi
af988d5f69 [server] Remove unnecessary logging when mailing lists are not configured (#4279) 2024-12-02 18:39:06 +05:30
Nikunj Kumar Nakum
f864db50c0 [auth] Updated binance and added dropbox (#4230)
## Description
added binance and dropbox icon, last updated icons were duplicated and
there were multiple entries of a same services which are removed.
## Tests
2024-12-02 18:38:41 +05:30
Neeraj Gupta
42ac90027a [auth] Add Fidelity icon (#4195)
Include icon for Fidelity Investments found on
https://www.fidelity.com/bin-public/600_Fidelity_Com_English/images/homepage/icon_fidelity_pyramid.svg
2024-12-02 18:37:27 +05:30
Neeraj Gupta
b775981e3f [auth] New translations (#4278)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-12-02 18:36:27 +05:30
Manav Rathi
43e458afdd [web] Update to latest libheif-js 1.18.2 (#4283) 2024-12-02 17:39:42 +05:30
Manav Rathi
5bcf8f9a58 Move GC pause voodoo to worker 2024-12-02 17:34:04 +05:30
Manav Rathi
bfbaa71c68 [web] Update to latest libheif-js 2024-12-02 17:28:01 +05:30
Manav Rathi
91e851523d [web] Auth: Paginate API responses, Filter out trashed, Pinned at top (#4281) 2024-12-02 14:24:16 +05:30
Manav Rathi
ea0bd31480 Pinned at the top 2024-12-02 14:16:55 +05:30
Manav Rathi
0ef71268fe Filter out trashed 2024-12-02 14:07:50 +05:30
Manav Rathi
f2c56ad843 Parse codeDisplay 2024-12-02 14:05:34 +05:30
Manav Rathi
1b38bdacfa Tweak 2024-12-02 13:51:17 +05:30
Manav Rathi
58ecbd5311 Pagination 2024-12-02 13:48:53 +05:30
Manav Rathi
2fc5594e8d [web] Minor cleanup (#4280) 2024-12-02 13:27:40 +05:30
Manav Rathi
e664b7ac30 sp 2024-12-02 11:58:19 +05:30
Manav Rathi
269b911cbf Prune things not related to auth 2024-12-02 10:49:09 +05:30
Manav Rathi
6d3f177d91 Allow map tiles to be loaded 2024-12-02 10:47:01 +05:30
Manav Rathi
ac15a502b9 [server] Remove unnecessary logging when mailing lists are not configured 2024-12-02 10:08:01 +05:30
Manav Rathi
7ddc8a6593 Remove unused file
Last use was stopped in c2191515ee
2024-12-02 09:44:39 +05:30
Manav Rathi
d4cebca274 Empty 2024-12-02 09:27:52 +05:30
Manav Rathi
bccb162f08 [web] New translations (#4275)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-12-02 09:03:01 +05:30
Manav Rathi
56cb724dce Dashes in ENV var names not supported by docker compose (#4269)
When I was trying to set this up, I was getting errors from `docker
compose`:

```
failed to read /var/hosts/ente/.credentials.env: line 11: unexpected character "-" in variable name "ENTE_APPS_PUBLIC-ALBUMS=https://<redacted>"
```

There was, apparently, a brief period in time when `docker compose`
supported dashes in ENV var names, [but this is no longer the
case](https://github.com/docker/compose/issues/12302), hence some vars
need to be defined in a `museum.yml` and mounted into the instance.
Maybe there is some rewriting in place that allows to redefine
`museum.yml` entries with dashes in ENV vars, however I couldn't find it
(and if there isn't, there probably should be, but this change should
make the guide usable again at least).
2024-12-02 09:01:43 +05:30
Crowdin Bot
57987e604e New Crowdin translations by GitHub Action 2024-12-02 01:17:49 +00:00
Crowdin Bot
680e5846de New Crowdin translations by GitHub Action 2024-12-02 01:05:30 +00:00
Crowdin Bot
4d2d613013 New Crowdin translations by GitHub Action 2024-12-02 00:38:09 +00:00
Neeraj Gupta
9650eb3ff6 [server] Enable replication for vid_preview 2024-12-02 05:49:38 +05:30
Neeraj Gupta
ca3d795a80 [auth] Add "Favorites" Tag to Display Pinned Codes (#4266)
## Description
This PR introduces a new Favorites tag, allowing users to quickly view
all their pinned codes in one place.
2024-12-01 06:49:03 +05:30
István Szmozsánszky
45bccc907e Fix typo 2024-12-01 00:13:58 +02:00
István Szmozsánszky
d8dfc6b5cc Dashes in ENV var names not supported by docker compose
Docker compose no longer supports dashes in ENV var names, hence some vars need to be defined in museum.yml
See https://github.com/docker/compose/issues/12302 for details
2024-11-30 23:47:08 +02:00
Aman Raj
b0c2efa2bc [auth] minor fixes 2024-11-30 17:11:02 +05:30
Aman Raj
ce7e6f1518 [auth] Added a favourite tag which shows all pinned codes 2024-11-30 15:00:59 +05:30
Neeraj Gupta
03de70d5f8 [mob] Move manage device cache option from Advance to Free up space (#4265)
## Description

## Tests
2024-11-30 14:56:08 +05:30
Neeraj Gupta
5b873b794d [mob] Rename copy 2024-11-30 14:53:03 +05:30
Neeraj Gupta
de6caf9958 [mob] Move manage device storage under free up section 2024-11-30 14:48:52 +05:30
Neeraj Gupta
33227f1b71 [mob] SaveOrEditPerson: Dismiss keyboard on tapping outside (#4263)
## Description

## Tests
2024-11-30 13:08:53 +05:30
Manav Rathi
b957b817a5 [web] General refactoring, tint towards public albums - Part x/x (#4260) 2024-11-30 07:02:08 +05:30
Manav Rathi
35b58f9804 Combine 2024-11-30 06:52:38 +05:30
Manav Rathi
a02dd4859d Combine 2024-11-30 06:41:39 +05:30
Manav Rathi
352b19b860 Add more details to the doc for the internal.disable-registration (#4259) 2024-11-30 06:12:38 +05:30
Manav Rathi
79f6c78015 Mention in FAQ 2024-11-30 06:10:37 +05:30
Manav Rathi
f950870459 [server] Add more details to the doc for the internal.disable-registration 2024-11-30 06:07:48 +05:30
Manav Rathi
c5ffdfd091 Add internal.disable-registration to config (#4238)
## Description
As discussed in #2476, I added an option `internal.disable-registration`
to allow disabling the registration of new users on selfhosted
instances.
Users can still go through the registration flow, but when entering the
ott they received via mail, they get an unauthorized error.

Should this be documented in any of the self-hosting documentation?
2024-11-30 05:56:43 +05:30
Neeraj Gupta
32f8075acf [server] Store preview obj size 2024-11-30 00:02:28 +05:30
Neeraj Gupta
9fb1dbf67e Merge branch 'main' into video_file_preview 2024-11-29 23:50:58 +05:30
Neeraj Gupta
bbbb49f401 [mob] Dismiss keyboard on tapping outside 2024-11-29 21:41:59 +05:30
Neeraj Gupta
d2335d7491 [server] Add missing nil check (#4257)
## Description

## Tests
2024-11-29 20:42:46 +05:30
Aman Raj
f68f0a5ea8 [auth] minor fixes 2024-11-29 20:24:50 +05:30
Aman Raj
c5996ffc9c [auth] Fix: update html UI 2024-11-29 20:14:02 +05:30
Neeraj Gupta
98c2e98e16 [server] Add missing nil check 2024-11-29 20:06:47 +05:30
Vishnu Mohandas
40abd89b97 [server] Limit unverifeid sessions (#4256)
## Description

This (cosmetic?) change is to reduce the brute-force attempt on password
cracking.

It feels cosmetic because each create-session call requires an expensive
KDF steps for different password. It's also not prone to dictionary
attack because of the nonce.

Still, this change felt harmless to make, and it's hardens the security
further.

## Tests
Tested locally
2024-11-29 19:55:18 +05:30
Neeraj Gupta
d3d419e12d [server] RateLimit max sessions in an hour 2024-11-29 19:33:36 +05:30
Julian Pollinger
aed7075a13 invert if condition 2024-11-29 14:50:46 +01:00
Manav Rathi
027cfbd883 [doc] Remove deprecated exception, 1.7.7 is already released (#4255) 2024-11-29 17:26:41 +05:30
Manav Rathi
378aba5b9a [doc] Remove deprecated exception, 1.7.7 is already released 2024-11-29 17:25:02 +05:30
Manav Rathi
830cae96c3 [web] General refactoring, focus on public albums (#4254) 2024-11-29 17:24:31 +05:30
Manav Rathi
33bda1a4a1 Doc 2024-11-29 17:20:54 +05:30
Manav Rathi
52d5ab31aa Retain order 2024-11-29 17:18:16 +05:30
Manav Rathi
b47d541a09 Missing dep 2024-11-29 17:14:18 +05:30
Manav Rathi
929224a2cb Reorder 2024-11-29 17:03:38 +05:30
Manav Rathi
12fbde45b3 Propogate 2024-11-29 16:57:24 +05:30
Manav Rathi
70eb18fe3b Combine 2024-11-29 16:17:35 +05:30
Manav Rathi
30d8ebd946 Reorder 2024-11-29 15:03:39 +05:30
Manav Rathi
85673177f5 Keep JSX together 2024-11-29 15:01:36 +05:30
Manav Rathi
0dbd8a0f8c Memo context to avoid unnecessary renders 2024-11-29 14:50:33 +05:30
Manav Rathi
8e1450c6c6 Convert deprecated method 2024-11-29 14:46:39 +05:30
Neeraj Gupta
b36a2dec45 [auth][search] fix focus on search icon tap (#4249)
## Description

Fixes #[3153](https://github.com/ente-io/ente/discussions/3153) and
#[3272](https://github.com/ente-io/ente/discussions/3272)

## Tests
2024-11-29 14:45:23 +05:30
Manav Rathi
2fbc3d1b90 Tweak 2024-11-29 14:43:30 +05:30
Prateek Sunal
29adca2a99 fix: temp dir scope 2024-11-29 14:39:59 +05:30
Prateek Sunal
fa333eff76 fix: mergable changes 2024-11-29 14:33:24 +05:30
Manav Rathi
d9bd79e5ef Default 2024-11-29 14:32:47 +05:30
Prateek Sunal
378a0bf0b1 chore: bump pod 2024-11-29 14:29:35 +05:30
Prateek Sunal
d9fc9e3c76 fix: request focus on search for all platforms 2024-11-29 14:28:16 +05:30
Manav Rathi
9fffbdb6fa Don't pass an undefined anchorEl 2024-11-29 14:25:14 +05:30
Manav Rathi
8642c4abe1 Tweak 2024-11-29 13:50:35 +05:30
Manav Rathi
cf96fe1553 Tweak 2024-11-29 13:39:51 +05:30
Manav Rathi
e02b76d2d2 Prune 2024-11-29 13:32:11 +05:30
Neeraj Gupta
06cad1b996 [server] fileData: Support for replicating object 2024-11-29 11:01:24 +05:30
Neeraj Gupta
2a4b15ea48 [server] Fix lint 2024-11-29 10:58:38 +05:30
Julian Pollinger
39f2d03e74 add internal.disable-registration to config 2024-11-29 00:44:33 +01:00
Neeraj Gupta
c0bbad8f88 Store nil as objectNonce for video objet 2024-11-28 15:38:47 +05:30
Neeraj Gupta
b5c2991575 Merge branch 'main' into video_file_preview 2024-11-28 12:46:09 +05:30
Edward
9b1dd3aa64 Add Fidelity icon 2024-11-26 19:45:40 -05:00
Aman Raj
f439f2fcec [auth] Add feature to export code as a HTML file 2024-11-25 12:26:35 +05:30
Prateek Sunal
a2854b344c Merge remote-tracking branch 'origin/main' into win-quickfix 2024-11-23 01:57:15 +05:30
Prateek Sunal
96d9637de1 feat: win quick fix 2024-11-23 01:42:43 +05:30
Neeraj Gupta
8b01129cc9 [server] FileData: Return objectId and nonce 2024-11-08 16:12:41 +05:30
Neeraj Gupta
58486744e1 Merge branch 'main' into video_file_preview 2024-11-08 15:52:36 +05:30
Neeraj Gupta
a0d46ac60e Merge branch 'main' into video_file_preview 2024-11-07 14:09:56 +05:30
Neeraj Gupta
2430473a10 [server] Minor refactor 2024-10-03 21:37:09 +05:30
Neeraj Gupta
4f963f250f [server] More fixes for video preview API 2024-10-01 22:34:11 +05:30
Neeraj Gupta
ca70c36ae0 [server] Fix minor bugs in reporting video preview 2024-10-01 22:01:37 +05:30
Neeraj Gupta
1bf8f2749e [server] Remove objectNonce from video preview 2024-10-01 21:32:43 +05:30
Neeraj Gupta
56b8728e79 Merge branch 'main' into video_file_preview 2024-10-01 21:23:41 +05:30
Neeraj Gupta
df28a8bf50 [server] Hook API to insert video preview 2024-09-30 16:02:13 +05:30
Neeraj Gupta
0a446a6629 [server] Fix deletion for preview objects 2024-09-30 15:57:15 +05:30
Neeraj Gupta
b8f1bce341 [server] Initial support for storing video preview data 2024-09-30 14:58:10 +05:30
Neeraj Gupta
be615197fd [server] Fix error in getting preview url 2024-09-25 15:50:33 +05:30
Neeraj Gupta
d4a68069ba [server] Add columns to store preview objects 2024-09-25 15:40:52 +05:30
Neeraj Gupta
8fc14c72e2 Merge branch 'main' into video_file_preview 2024-09-25 15:26:29 +05:30
Neeraj Gupta
69d75644d0 Merge remote-tracking branch 'origin/main' into video_file_preview 2024-09-06 12:02:34 +05:30
Neeraj Gupta
1fabaf9aaa [server] Request model for putting video preview 2024-09-06 12:02:29 +05:30
Neeraj Gupta
aa482ea227 [server] Return both objectID and url for previewUrl 2024-09-06 12:01:16 +05:30
Neeraj Gupta
41c242a0ee [server] Ignore __debug_bin 2024-09-04 16:05:50 +05:30
Neeraj Gupta
c2e53c6ec9 [server] Clean up 2024-09-04 14:39:36 +05:30
508 changed files with 23904 additions and 11043 deletions

View File

@@ -22,6 +22,30 @@ jobs:
with:
submodules: recursive
- name: Verify custom icons are lowercase including optional understores, and end with .svg
run: |
find assets/custom-icons -type f -name "*.svg" | while read -r file; do
if [[ "$(basename "$file")" != "$(basename "$file" | tr '[:upper:]' '[:lower:]' | tr ' ' '_')" ]]; then
echo "File name is not lowercase: $file"
exit 1
fi
done
- name: Verify all icons are less than 20KB
run: |
find assets/custom-icons -type f -name "*.svg" | while read -r file; do
if [[ "$file" == "assets/custom-icons/icons/bbs_nga.svg" ]]; then
continue
fi
if [[ "$(stat --printf="%s" "$file")" -gt 20480 ]]; then
echo "File size is greater than 20KB: $file ($file_size bytes)"
exit 1
fi
done
- name: Verify custom icon JSON
run: cat assets/custom-icons/_data/custom-icons.json | jq empty
- name: Install Flutter ${{ env.FLUTTER_VERSION }}
uses: subosito/flutter-action@v2
with:
@@ -32,6 +56,3 @@ jobs:
- run: flutter pub get
- run: flutter analyze --no-fatal-infos
- name: Verify custom icon JSON
run: cat assets/custom-icons/_data/custom-icons.json | jq empty

View File

@@ -151,7 +151,7 @@ jobs:
- name: Install dependencies for desktop build
run: |
sudo apt-get update -y
sudo apt-get install -y libsecret-1-dev libsodium-dev libfuse2 ninja-build libgtk-3-dev dpkg-dev pkg-config rpm patchelf libsqlite3-dev locate libayatana-appindicator3-dev libffi-dev libtiff5 xz-utils libarchive-tools
sudo apt-get install -y libsecret-1-dev libsodium-dev libfuse2 ninja-build libgtk-3-dev dpkg-dev pkg-config rpm patchelf libsqlite3-dev locate libayatana-appindicator3-dev libffi-dev libtiff5 xz-utils libarchive-tools libcurl4-openssl-dev
sudo updatedb --localpaths='/usr/lib/x86_64-linux-gnu'
- name: Install appimagetool

View File

@@ -30,10 +30,10 @@ Learn more at [ente.io](https://ente.io).
![Screenshots of Ente Photos](.github/assets/photos.png)
Our flagship product. 3x data replication. On device machine learning. Cross
platform. Private sharing. Collaborative albums. Family plans. Easy import,
easier export. Background uploads. The list goes on. And of course, all of this,
while being fully end-to-end encrypted.
Our flagship product. 3x data replication. Face detection. Semantic search.
Private sharing. Collaborative albums. Family plans. Easy import, easier export.
Background uploads. The list goes on. And of course, all of this, while being
fully end-to-end encrypted across platforms.
Ente Photos is a paid service, but we offer 5GB of free storage.
You can also clone this repository and choose to self-host.

View File

@@ -1,7 +1,8 @@
{
"icons": [
{
"title": "1xBet"
"title": "1xBet",
"slug": "1x_bet"
},
{
"title": "23andme"
@@ -45,13 +46,15 @@
},
{
"title": "BaiduCloud",
"slug": "baidu_cloud",
"altNames": [
"百度云",
"baiduyun"
]
},
{
"title": "Band"
"title": "Band",
"slug": "band"
},
{
"title": "Battle.net",
@@ -63,6 +66,7 @@
},
{
"title": "BBS.NGA",
"slug": "bbs_nga",
"altNames": [
"NGA玩家社区",
"NGA社区"
@@ -76,6 +80,7 @@
},
{
"title": "Binance",
"slug": "binance_exchange",
"altNames": [
"币安"
]
@@ -123,13 +128,6 @@
{
"title": "Bitwarden"
},
{
"title": "Bloom Host",
"slug": "bloom_host",
"altNames": [
"Bloom Host Billing"
]
},
{
"title": "Blockchain",
"altNames": [
@@ -146,7 +144,8 @@
]
},
{
"title": "Bluesky"
"title": "Bluesky",
"slug": "blue_sky"
},
{
"title": "Booking",
@@ -156,16 +155,11 @@
},
{
"title": "BorgBase",
"slug": "borg_base",
"altNames": [
"borg"
]
},
{
"title": "Booking",
"altNames": [
"Booking.com"
]
},
{
"title": "Brave Creators",
"slug": "brave_creators",
@@ -175,6 +169,9 @@
"Brave Browser"
]
},
{
"title": "Bugzilla"
},
{
"title": "Bybit"
},
@@ -191,7 +188,8 @@
]
},
{
"title": "CERN"
"title": "CERN",
"slug": "cern"
},
{
"title": "ChangeNOW"
@@ -268,6 +266,13 @@
{
"title": "Doppler"
},
{
"title": "Dropbox"
},
{
"title": "DreamHost Panel",
"slug": "dreamhost_panel"
},
{
"title": "dus.net",
"slug": "dusnet"
@@ -285,12 +290,16 @@
"Murena"
]
},
{
"title": "eneba"
},
{
"title": "ente",
"hex": "1DB954"
},
{
"title": "enom"
"title": "enom",
"slug": "enom_v1"
},
{
"title": "Epic Games",
@@ -303,6 +312,13 @@
{
"title": "Estateguru"
},
{
"title": "Fidelity",
"slug": "fidelity",
"altNames": [
"Fidelity Investments"
]
},
{
"title": "Filen"
},
@@ -330,7 +346,7 @@
},
{
"title": "Gosuslugi",
"slug": "Gosuslugi",
"slug": "gosuslugi",
"altNames": [
"Госуслуги"
]
@@ -377,11 +393,12 @@
]
},
{
"title": "IceDrive"
"title": "IceDrive",
"slug": "ice_drive"
},
{
"title": "ID.me",
"slug": "IDme"
"slug": "id_me"
},
{
"title": "Infomaniak"
@@ -409,7 +426,8 @@
"hex": "000000"
},
{
"title": "IVPN"
"title": "IVPN",
"slug": "ivpn"
},
{
"title": "Jagex",
@@ -430,6 +448,9 @@
{
"title": "Kite"
},
{
"title": "Kotas"
},
{
"title": "KnownHost",
"altNames": [
@@ -439,6 +460,7 @@
},
{
"title": "Ko-fi",
"slug": "ko_fi",
"altNames": [
"Ko fi",
"Kofi"
@@ -466,6 +488,7 @@
},
{
"title": "Lark",
"slug": "lark",
"altNames": [
"飞书"
]
@@ -475,7 +498,7 @@
},
{
"title": "Linux.Do",
"slug": "LINUX_DO",
"slug": "linux_do",
"altNames": [
"LINUX DO",
"LinxDo"
@@ -508,6 +531,12 @@
],
"hex": "6364FF"
},
{
"title": "matlab",
"altNames": [
"mathworks"
]
},
{
"title": "Mercado Livre",
"slug": "mercado_livre",
@@ -518,7 +547,7 @@
]
},
{
"title": "Microsoft"
"title": "microsoft"
},
{
"title": "Microsoft 365",
@@ -574,6 +603,7 @@
},
{
"title": "NeteaseMail",
"slug": "netease_mail",
"altNames": [
"网易邮箱",
"Mail.163"
@@ -593,7 +623,10 @@
"hex": "858585"
},
{
"title": "Nintendo",
"title": "Nelnet"
},
{
"title": "nintendo",
"altNames": [
"任天堂"
]
@@ -601,6 +634,14 @@
{
"title": "Njalla"
},
{
"title": "nordvpn",
"slug": "nordaccount",
"hex": "4687FF",
"altNames": [
"Nord Account"
]
},
{
"title": "Notesnook"
},
@@ -643,10 +684,12 @@
"hex": "f08222"
},
{
"title": "pCloud"
"title": "pCloud",
"slug": "pcloud"
},
{
"title": "PebbleHost",
"slug": "pebble_host",
"altNames": [
"Pebble Host"
]
@@ -684,6 +727,10 @@
{
"title": "Proxmox"
},
{
"title": "Pushover",
"slug": "pushover"
},
{
"title": "qiniuyun",
"altNames": [
@@ -698,6 +745,10 @@
"Raindrop"
]
},
{
"title": "randstad",
"hex": "2175D9"
},
{
"title": "Real-Debrid",
"slug": "real_debrid"
@@ -719,6 +770,7 @@
},
{
"title": "Restream",
"slug": "restream",
"altNames": [
"restream.io"
]
@@ -788,6 +840,9 @@
{
"title": "Snapchat"
},
{
"title": "SpaceHey"
},
{
"title": "Standard Notes",
"slug": "standardnotes"
@@ -841,6 +896,7 @@
},
{
"title": "Terabit",
"slug": "terabit",
"altNames": [
"Terabit Hosting",
"terabit.io"
@@ -923,6 +979,10 @@
{
"title": "Upstox"
},
{
"title": "US Mobile",
"slug": "us_mobile"
},
{
"title": "Vikunja"
},
@@ -933,7 +993,8 @@
]
},
{
"title": "WARGAMING.NET"
"title": "WARGAMING.NET",
"slug": "wargamingnet"
},
{
"title": "Wealthfront"
@@ -955,6 +1016,9 @@
{
"title": "Wise"
},
{
"title": "Wolvesville"
},
{
"title": "WorkOS",
"altNames": [
@@ -969,6 +1033,7 @@
},
{
"title": "Yandex",
"slug": "yandex",
"altNames": [
"Ya",
"Яндекс"
@@ -981,4 +1046,4 @@
]
}
]
}
}

View File

Before

Width:  |  Height:  |  Size: 481 B

After

Width:  |  Height:  |  Size: 481 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 52 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" vector-effect="non-scaling-stroke" viewBox="0 0 500 500">
<g fill="#F0B90B">
<path d="m0 250 56.452-56.451L112.903 250l-56.451 56.451L0 250zm96.774-96.774L250 0l153.226 153.226-56.452 56.451L250 112.903l-96.774 96.774-56.452-56.451z"/>
<path d="M193.549 250 250 193.549 306.451 250 250 306.451 193.549 250z"/>
<path d="m153.226 290.323-56.452 56.451L250 500l153.226-153.226-56.452-56.451L250 387.097l-96.774-96.774zM387.097 250l56.452-56.451L500 250l-56.451 56.451L387.097 250z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 561 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 662 B

After

Width:  |  Height:  |  Size: 662 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 242 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.1 MiB

After

Width:  |  Height:  |  Size: 785 B

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="160.5px" height="160.5px" viewBox="0 0 160.5 160.5" enable-background="new 0 0 160.5 160.5" xml:space="preserve">
<g>
<path d="M145.794,113.854c-11.111,5.932-23.811,9.227-37.417,9.008c-40.366-0.879-72.114-32.293-71.434-70.515
c0.227-12.961,4.309-25.042,11.112-35.148C26.512,28.841,11.771,50.589,11.318,75.851c-0.907,38.002,31.068,69.636,71.208,70.515
C109.284,146.805,132.642,133.844,145.794,113.854z"/>
<path fill="#0073EC" d="M86.833,14.123c-10.885,0-21.09,2.636-30.161,7.469c-5.669,9.007-8.844,19.331-9.297,29.875
c-0.68,33.171,27.212,60.63,61.909,61.289c10.432,0,22.224-2.417,31.294-7.249c5.443-9.007,8.617-19.551,8.617-30.754
C149.648,41.362,121.53,14.123,86.833,14.123z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" vector-effect="non-scaling-stroke" viewBox="0 0 500 500">
<g fill="#0061fe">
<path d="M125.022 38.07.055 117.545l124.967 79.473 124.988-79.473 124.968 79.473 124.967-79.473-124.967-79.473-124.968 79.473-124.988-79.473z"/>
<path d="M125.022 355.967.055 276.492l124.967-79.475 124.988 79.475-124.988 79.475zm124.988-79.475 124.968-79.475 124.967 79.475-124.967 79.475-124.968-79.475zm0 185.438-124.988-79.474 124.988-79.473 124.968 79.473L250.01 461.93z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 531 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="480px" height="480px"><path fill="#66bb6a" d="M11.622,31.768c0.46,0.787-0.09,1.951-1.229,2.6S7.58,35.391,7.12,34.604 c-0.46-0.787,0.469-2.436,1.607-3.086C9.866,30.869,11.162,30.981,11.622,31.768z"/><path fill="#66bb6a" d="M18.766,27.808c0.115,0.812,1.256,1.326,2.549,1.148c1.293-0.178,2.841-0.851,2.726-1.663 c-0.115-0.812-1.85-1.457-3.142-1.279C19.606,26.192,18.651,26.996,18.766,27.808z"/><path fill="#aa2c2c" d="M38.352,14.876l-0.031-3.849L36,8c0,0-1.355-1.052-1.589-1.197c-1.12-0.693-2.797-1.453-3.463-0.064 c-0.364,0.759,0.694,2.314,1.053,3.074c1.571,3.325,1.03,4.822-0.387,10.514L38.352,14.876z"/><path fill="#fb8c00" d="M8.277,15.795l-3.124,2.422c0,0-1.153,0.451-1.153,4.569c0,2.343,0.867,4.499,2.434,4.183 c0.856-0.172,1.44-2.013,1.828-2.783c1.697-3.367,3.271-3.852,8.841-6.227L8.277,15.795z"/><path fill="#43a047" d="M23.888,32.502l4.786,8.997c0,0,0.96,0.758,4.539-1.295c2.037-1.169,3.484-2.983,2.438-4.163 c-0.571-0.644-2.457-0.198-3.319-0.172C27.413,36.017,23.888,32.502,23.888,32.502z"/><path fill="#ff1744" d="M42.266,21.316c0.913-0.806,1.803-1.836,1.73-2.356c-0.101-0.721-1.156-0.865-2.133-0.775 c-0.418-3.378-3.511-9.378-8.003-11.683c1.233,3.926,0.175,8.972-5.791,14.952c-0.009,0.009-0.018,0.018-0.027,0.027 c-2.091,2.075-2.671,5.223-1.299,7.845c2.05,3.92,6.758,4.705,9.863,2.354l0.008-0.008c0.296-0.253,0.593-0.507,0.866-0.784 c0.094-0.079,0.172-0.158,0.258-0.245c0.683-0.693,1.276-1.443,1.794-2.229c1.418-0.78,3.332-2.199,3.332-2.864 c0-0.563-0.716-0.808-1.577-0.869c0.001-0.003,0.002-0.007,0.003-0.01c1.288-0.8,2.677-1.913,2.677-2.48 C43.967,21.6,43.18,21.361,42.266,21.316z"/><path fill="#66bb6a" d="M14.786,23.021c3.086-0.244,5.884,1.626,7.033,4.519c0.005,0.012,2.976,9.717,10.954,12.963 c-0.809,0.511-1.675,0.943-2.594,1.308c-8.356,3.319-17.821-0.551-21.142-8.657c-0.049-0.12-0.093-0.228-0.132-0.352 c-0.156-0.38-0.279-0.773-0.402-1.167l-0.004-0.011C7.498,27.633,10.172,23.386,14.786,23.021z"/><path fill="#ffb74d" d="M26.375,8.221c0.324-0.298,0.526-0.67,0.526-1.081c0-0.356-0.147-0.686-0.397-0.962 c0.241-0.206,0.397-0.476,0.397-0.777c0-0.282-0.144-0.53-0.357-0.731c0.048-0.052,0.099-0.092,0.144-0.151 c0.431-0.564,0.526-1.208,0.212-1.438c-0.314-0.23-0.918,0.04-1.35,0.604c-0.148,0.193-0.24,0.392-0.306,0.584 c-0.73,0.071-1.304,0.54-1.304,1.132c0,0.021,0.014,0.038,0.015,0.058c-0.804,0.149-1.437,0.597-1.677,1.175 C13.537,5.445,5.434,11.67,4.165,20.541c-0.14,0.976-0.194,1.94-0.151,2.894c6.823-5.257,16.795-2.954,16.809-2.953 c3.104,0.459,6.137-1.018,7.464-3.803C29.813,13.479,28.756,10.123,26.375,8.221z"/></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,11 @@
<svg width="49" height="48" viewBox="0 0 49 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_933_28141)">
<path d="M24.9434 48C38.1983 48 48.9434 37.2548 48.9434 24C48.9434 10.7452 38.1983 0 24.9434 0C11.6886 0 0.94342 10.7452 0.94342 24C0.94342 37.2548 11.6886 48 24.9434 48Z" fill="white"/>
<path d="M22.5996 27.795H29.2838L31.2396 29.0631H22.3059L18.3011 41.4571C16.0258 40.544 13.9543 39.1883 12.2067 37.4686C10.4592 35.7489 9.07035 33.6995 8.12074 31.4391C7.17113 29.1787 6.67963 26.7523 6.67472 24.3005C6.66982 21.8487 7.15161 19.4204 8.09217 17.1562C9.94318 12.7412 13.423 9.20846 17.8095 7.29094C22.196 5.37342 27.1523 5.2184 31.6501 6.85805C36.1478 8.4977 39.8416 11.8061 41.9649 16.0968C44.0882 20.3874 44.478 25.3309 43.0534 29.9013C41.9853 33.3728 39.9048 36.4463 37.0784 38.7276L32.1423 30.5031L39.0128 34.3359C39.0128 34.3359 39.0701 34.2929 39.0128 34.2499L30.0576 26.484L41.685 28.2607C41.728 28.2607 41.7423 28.2607 41.7423 28.2607L41.6707 28.1962L30.6952 24.3204L42.1005 21.5622C42.1005 21.5622 42.1005 21.5622 42.1005 21.5049L30.4229 22.2714L39.5787 15.3365C39.5787 15.3365 39.5214 15.2792 39.4999 15.3365L29.2122 20.552L34.879 10.5222C34.879 10.5222 34.879 10.4649 34.8432 10.5222L27.4355 19.1837L28.8683 7.721C28.8683 7.721 28.8253 7.67801 28.7895 7.721L25.3722 18.8326L22.3847 7.36995C22.3847 7.36995 22.3202 7.33413 22.2987 7.36995L23.1226 19.2625L16.0802 10.0923C16.0802 10.0923 16.0373 10.0923 16.0158 10.0923L21.3459 20.244L11.2731 14.749C11.2731 14.749 11.2158 14.749 11.2158 14.792L20.1781 22.1496L8.71545 20.9389C8.67247 20.9389 8.67247 20.9962 8.71545 21.0177L19.8343 24.2631L8.79426 27.5013C8.78949 27.506 8.78571 27.5115 8.78312 27.5177C8.78054 27.5238 8.77921 27.5304 8.77921 27.5371C8.77921 27.5438 8.78054 27.5504 8.78312 27.5565C8.78571 27.5627 8.78949 27.5683 8.79426 27.5729L20.1781 26.2834L11.2373 33.8416C11.2373 33.8416 11.1943 33.8846 11.2373 33.9061L11.3519 33.8631L18.5161 30.1162L20.1925 27.444H22.1053L20.7799 26.5055L25.2074 19.3986L22.5996 27.795Z" fill="#368727"/>
</g>
<defs>
<clipPath id="clip0_933_28141">
<rect width="49" height="48" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,5 @@
<svg width="500" height="500" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg">
<g style="mix-blend-mode:difference">
<path d="M105.08 0.61C90.5 2.16 71.47 8.21 57.3 15.82C28.49 31.36 10.26 55.31 3.69 86.29C0.94 99.26 1.00 94.06 1.00 249.17C1.00 386.74 1.06 395.6 2.03 401.78C5.40 423.61 13.35 442.47 25.46 457.5C30.32 463.56 40.49 473.27 46.27 477.39C65.24 490.93 88.90 498.99 112.16 499.91C139.48 500.99 165.60 491.62 188.29 472.53C194.29 467.50 222.01 440.24 233.90 427.72C241.45 419.78 244.13 418.06 249.33 418.12C255.22 418.12 258.88 420.86 269.62 433.15C278.20 442.93 306.54 470.07 314.09 475.67C324.49 483.45 332.66 488.02 343.92 492.36C388.79 509.62 438.68 497.05 470.23 460.47C504.47 420.86 507.90 364.91 478.80 320.90C472.18 310.79 466.52 304.56 441.48 279.58C424.57 262.72 417.59 255.35 416.79 253.58C414.05 247.57 414.96 246.20 435.43 226.14C456.63 205.34 473.20 187.91 477.55 181.85C488.18 166.99 494.35 152.47 497.21 135.67C498.64 127.04 498.64 108.52 497.15 99.72C491.38 64.23 475.20 38.05 448.00 19.93C428.68 7.07 407.19 0.61 383.82 0.56C356.27 0.56 332.66 8.84 311.34 26.10C305.57 30.79 276.77 58.97 263.56 72.91C256.36 80.51 254.02 82.17 249.85 82.69C248.19 82.91 246.88 82.63 244.48 81.49C241.96 80.23 239.39 77.83 231.10 68.97C212.18 48.68 193.15 30.56 182.75 22.85C158.74 5.19 132.74 -2.30 105.08 0.61ZM397.19 49.37C405.71 51.19 413.65 54.51 420.79 59.14C426.85 63.03 437.43 73.88 441.26 80.17C453.43 99.83 454.91 122.69 445.31 142.87C440.17 153.67 439.20 154.81 397.59 196.88C356.95 237.97 315.80 279.01 289.86 304.33C277.74 316.22 274.37 319.82 273.17 322.27C271.28 326.16 271.17 329.36 272.94 332.50C274.71 335.76 292.66 353.94 295.51 355.42C298.66 357.02 302.49 356.97 305.80 355.31C307.46 354.51 310.43 351.82 314.15 347.76C317.29 344.28 331.46 329.88 345.64 315.70C363.07 298.27 372.10 289.58 373.64 288.90C376.44 287.64 380.04 287.64 382.44 288.90C385.19 290.33 433.02 338.73 437.37 344.51C448.28 359.02 453.31 377.08 451.03 393.54C446.23 428.35 411.42 457.04 378.67 453.33C365.24 451.78 354.38 447.16 342.55 437.90C336.66 433.32 161.55 258.78 159.03 255.00C156.74 251.58 156.74 248.60 158.97 245.12C159.83 243.75 175.20 228.09 193.09 210.31C213.10 190.48 226.01 177.22 226.64 175.90C228.81 171.33 227.33 167.56 221.21 162.19C218.98 160.19 214.58 156.24 211.50 153.44C198.64 141.67 197.72 141.15 194.01 143.15C191.61 144.41 104.79 231.80 101.42 236.32C95.65 244.09 94.56 250.49 97.82 257.52C98.79 259.63 101.08 263.18 102.91 265.41C104.68 267.64 129.25 292.55 157.49 320.79C188.58 351.94 209.21 373.03 209.90 374.34C211.38 377.26 211.38 381.20 209.84 384.23C209.15 385.60 206.01 389.09 202.52 392.29C199.21 395.43 187.61 406.92 176.75 417.84C155.49 439.27 151.20 442.87 141.60 447.56C127.14 454.59 111.88 455.44 95.88 450.13C73.59 442.64 56.78 427.09 50.95 408.63C47.69 398.29 47.92 409.66 47.75 253.46C47.58 126.12 47.69 109.32 48.44 103.78C50.61 88.86 56.61 77.08 67.07 67.14C76.56 58.11 88.96 51.65 101.13 49.37C108.68 47.99 122.51 48.45 130.00 50.45C141.08 53.37 150.23 57.94 158.92 64.91C161.37 66.85 198.18 103.43 240.87 146.18C301.86 207.39 319.00 224.26 321.29 225.40C325.35 227.46 329.23 227.40 333.06 225.23C336.09 223.51 341.24 218.37 347.98 210.31C355.12 201.79 356.21 198.19 353.07 192.82C351.07 189.39 322.09 159.67 297.11 135.44C285.74 124.41 284.54 121.27 289.11 114.52C290.20 112.86 292.71 110.18 294.66 108.52C296.60 106.86 307.57 96.06 319.06 84.57C337.58 65.94 340.61 63.14 346.09 59.54C354.67 53.94 364.50 50.11 374.21 48.57C379.01 47.82 392.27 48.28 397.19 49.37Z" fill="white"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@@ -0,0 +1 @@
<svg viewBox="2 3.299999999999999 28 25.43" xmlns="http://www.w3.org/2000/svg" width="2500" height="2128"><linearGradient id="a" gradientTransform="matrix(1 0 0 -1 0 32)" gradientUnits="userSpaceOnUse" x1="16.803" x2="15.013" y1="16.631" y2="22.411"><stop offset="0" stop-color="#512"/><stop offset=".23" stop-color="#523"/><stop offset=".36" stop-color="#534"/><stop offset=".51" stop-color="#645"/><stop offset=".66" stop-color="#568"/><stop offset=".84" stop-color="#29d"/></linearGradient><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="29.71" x2="11.71" y1="18.983" y2="14.563"><stop offset=".081" stop-color="#c33"/><stop offset=".189" stop-color="#de5239"/><stop offset=".313" stop-color="#f06e3e"/><stop offset=".421" stop-color="#fa8042"/><stop offset=".5" stop-color="#fe8643"/><stop offset=".58" stop-color="#fa7f42"/><stop offset=".696" stop-color="#ef6c3e"/><stop offset=".833" stop-color="#dc4c37"/><stop offset=".916" stop-color="#cf3633"/></linearGradient><path d="M2 17.55l7.97-3.22a20.7 20.7 0 0 1 2.72-2.95c.66-.35 1.9-.16 4.17-2.98 2.2-2.75 2.9-5.1 3.93-5.1 1.63 0 2.83 3.52 4.65 8.85A115.629 115.629 0 0 0 30 24.12c-1.9-1.77-3.52-3.68-5.37-3.63-1.72.04-3.63 2.08-5.72 4.7-1.66 2.1-3.86 3.54-4.72 3.51 0 0-2.22-6.28-4.08-7.3a2.641 2.641 0 0 0-2.39.2L2 17.54z" fill="#49d"/><path d="M19.8 4.02c-.67.9-1.48 2.55-2.94 4.38-2.27 2.82-3.5 2.63-4.17 2.98a19.674 19.674 0 0 0-2.72 2.95l3.3 2.41c2.8-3.82 4.3-7.96 5.47-10.64a13.579 13.579 0 0 1 1.06-2.08z" fill="url(#a)"/><path d="M20.8 3.3c-2.18 0-3.67 11.48-11.72 17.89 2.26-.37 4.22 5.24 5.12 7.51 4-.68 7.2-8.33 10.43-8.21 1.85.07 3.47 1.86 5.37 3.63C25.66 15 23.63 3.3 20.8 3.3z" fill="url(#b)"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="167.5px" height="167.5px" viewBox="0 0 167.5 167.5" enable-background="new 0 0 167.5 167.5" xml:space="preserve">
<g>
<defs>
<rect id="SVGID_1_" x="3.75" y="3.75" width="160" height="160"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<g id="icon-circle-n" clip-path="url(#SVGID_2_)">
<rect x="3.75" y="3.75" fill="#FFFFFF" width="160" height="160"/>
<g id="Group_1" transform="translate(-283.001 134)">
<path id="Path_926" fill="#A2AAAD" d="M371.633-89.707c-8.596,0-14.667,3.859-19.81,8.422l-0.283-5.307
c-0.027-0.655-0.562-1.173-1.217-1.178h-16.4c-0.68,0.004-1.229,0.56-1.224,1.24c0,0.001,0,0.003,0,0.004v74.489
c-0.003,0.678,0.542,1.23,1.221,1.236h18.258c0.68-0.004,1.228-0.557,1.225-1.236v-51.36c6.662-7.678,9.619-8.926,14.025-8.926
c6.132,0,12.679,4.229,12.679,16.1v44.186c-0.004,0.678,0.543,1.231,1.221,1.236c0,0,0,0,0.001,0h18.259
c0.678-0.006,1.225-0.559,1.221-1.236v-47.985C400.81-79.507,386.134-89.707,371.633-89.707"/>
<linearGradient id="Path_929_1_" gradientUnits="userSpaceOnUse" x1="59.4341" y1="340.5049" x2="59.4341" y2="339.5049" gradientTransform="matrix(160 0 0 -160 -9142.6602 54350.5)">
<stop offset="0" style="stop-color:#AFD135"/>
<stop offset="1" style="stop-color:#70BA44"/>
</linearGradient>
<path id="Path_929" fill="url(#Path_929_1_)" d="M366.751-130.25c-44.162,0.05-79.95,35.838-80,80l0,0
c0.051,44.162,35.838,79.949,80,80l0,0c44.162-0.051,79.949-35.838,80-80l0,0C446.701-94.412,410.913-130.2,366.751-130.25z
M303.223-50.25c0.04-35.069,28.459-63.487,63.528-63.527l0,0c35.065,0.043,63.479,28.459,63.521,63.525l0,0
c-0.042,35.065-28.456,63.481-63.521,63.525l0,0c-35.066-0.043-63.483-28.459-63.524-63.525"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg8"
version="1.1"
viewBox="0 0 600 200"
height="200"
width="600">
<defs
id="defs2" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(0,-626.49998)"
id="layer1">
<rect
y="626.5"
x="0"
height="200"
width="600"
id="rect80"
style="opacity:1;vector-effect:none;fill:#e60012;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:15.00000095;stroke-miterlimit:4;stroke-dasharray:none;paint-order:stroke markers fill" />
<path
d="M 110.9662,789.5669 C 70.8232,789.5533 44.000009,761.10508 44.000009,726.61229 v 0 c 0,-34.49278 26.884385,-63.26737 66.904991,-63.17898 h 378.19 c 40.02061,-0.0884 66.90499,28.6862 66.90499,63.17898 v 0 c 0,34.49279 -26.82319,62.94101 -66.96618,62.95461 z m 0.12238,-110.61761 c -31.779868,0.0612 -51.287026,21.30216 -51.287026,47.58141 v 0 c 0,26.27245 19.38477,47.69021 51.287026,47.57462 h 377.82284 c 31.90226,0.10879 51.29383,-21.30217 51.29383,-47.57462 v 0 c 0,-26.27245 -19.50716,-47.51342 -51.28703,-47.57462 z m 398.14591,22.17927 c 2.8897,0 4.32435,0.9791 4.32435,2.9169 0,1.33266 -0.82952,2.33895 -2.20977,2.68572 l 2.26416,4.52152 h -2.74011 l -1.9378,-4.14756 h -1.20347 v 4.14756 h -2.46814 v -10.12414 z m -0.22438,-3.95718 c -5.04507,0 -9.13824,4.09317 -9.13824,9.13824 0,5.04507 4.09317,9.13824 9.13824,9.13824 5.04508,0 9.13825,-4.09317 9.13825,-9.13824 0,-5.04507 -4.09317,-9.13824 -9.13825,-9.13824 z m 7.39083,9.14504 c 0,4.07957 -3.31125,7.39083 -7.39083,7.39083 -4.07957,0 -7.39082,-3.31126 -7.39082,-7.39083 0,-4.07957 3.31125,-7.39083 7.39082,-7.39083 4.07958,0 7.39083,3.30446 7.39083,7.39083 z m -8.66909,-0.69353 h 1.20347 c 1.40745,0 2.08738,-0.42835 2.08738,-1.43465 0,-1.05389 -0.72752,-1.50944 -2.20977,-1.50944 h -1.08108 z M 301.19668,730.3655 c -0.0272,-3.46084 0.0476,-5.77259 1.18307,-7.74439 1.39386,-2.43414 3.95719,-3.59002 6.28254,-3.60362 h -0.007 c 2.32536,0.0136 4.88869,1.16948 6.28255,3.60362 1.13548,1.97859 1.18307,4.29035 1.15588,7.75119 z m 14.83604,11.90555 c 0,0 0.0136,0.17679 0.0136,2.39335 0,7.22085 -4.7527,8.82548 -7.39083,8.82548 -2.63812,0 -7.47241,-1.60463 -7.47241,-8.82548 0,-2.16217 0.0136,-8.15234 0.0136,-8.15234 0,0 33.63607,0.0136 33.63607,-0.007 0,-12.24552 -11.82396,-22.39006 -26.34724,-22.39006 -14.52328,0 -26.29284,9.92696 -26.29284,22.17248 0,12.24552 11.76956,22.16568 26.29284,22.16568 12.04834,0 22.22687,-6.87408 25.33415,-16.1959 z m 56.18252,-27.49632 c 6.6769,-0.19038 20.22108,4.18157 20.12589,19.81313 -0.0136,2.77411 -0.007,21.48575 -0.007,21.48575 h -17.73934 c 0,0 0,-23.46434 0,-25.93249 0,-3.44044 -3.29086,-7.26843 -8.15915,-7.26843 -4.86149,0 -8.47871,3.82799 -8.47871,7.26843 0,1.68623 0.0204,25.93249 0.0204,25.93249 h -17.72574 l 0.0136,-39.48347 17.71895,-0.0136 c 0,0 -0.0204,3.17526 0,4.15436 3.41324,-3.25686 8.33593,-5.78619 14.23091,-5.95618 z m -145.11041,0 c 6.6769,-0.19038 20.22109,4.18157 20.1259,19.81313 -0.0136,2.77411 -0.007,21.48575 -0.007,21.48575 h -17.73935 c 0,0 0,-23.46434 0,-25.93249 0,-3.44044 -3.29085,-7.26843 -8.15914,-7.26843 -4.86149,0 -8.47871,3.82799 -8.47871,7.26843 0,1.68623 0.0204,25.93249 0.0204,25.93249 h -17.72574 l -0.007,-39.48347 17.73934,-0.0136 c 0,0 -0.0204,3.17526 0,4.15436 3.41325,-3.25686 8.32913,-5.78619 14.23091,-5.95618 z m 203.72027,-18.0657 h 17.62376 v 59.37818 H 430.7979 c 0,0 -0.007,-1.9174 -0.007,-2.28456 -6.83328,4.29035 -14.54367,4.28355 -20.54744,1.48224 -1.61144,-0.74792 -12.21153,-5.83379 -12.21153,-19.57515 0,-10.42331 9.83178,-21.80532 22.70283,-20.67663 4.23595,0.37396 7.24804,1.9174 10.10374,3.52203 -0.0136,-9.13825 -0.0136,-21.84611 -0.0136,-21.84611 z m 0.12919,39.43587 c 0,0 0,-4.94989 0,-7.05767 0,-6.10576 -4.21556,-7.66279 -6.98967,-7.66279 -2.8421,0 -7.00327,1.55703 -7.00327,7.66279 0,2.02619 0.007,7.03727 0.007,7.03727 0,0 -0.007,4.92268 -0.007,7.02366 0,6.09896 4.16117,7.6968 6.99647,7.6968 2.78091,0 7.00327,-1.59784 7.00327,-7.6968 0,-2.53613 -0.007,-7.00326 -0.007,-7.00326 z m 56.57687,-0.11559 c 0,0 -0.007,5.96977 -0.007,8.36312 0,6.29614 -3.71921,8.89347 -7.29563,8.89347 -3.58323,0 -7.31604,-2.59733 -7.31604,-8.89347 0,-2.39335 0.007,-8.51271 0.007,-8.51271 0,0 0.0136,-5.84058 0.0136,-8.23393 0,-6.26895 3.73961,-8.84588 7.29564,-8.84588 3.56282,0 7.29563,2.57693 7.29563,8.84588 0,2.39335 -0.007,6.81968 0.0136,8.40392 z m -7.17325,-22.12489 c -14.41449,0 -26.09566,9.92697 -26.09566,22.17248 0,12.24552 11.68797,22.17248 26.09566,22.17248 14.41449,0 26.09567,-9.92696 26.09567,-22.17248 0,-12.24551 -11.68118,-22.17248 -26.09567,-22.17248 z m -312.95082,-5.07226 v -12.13673 h 17.89572 v 12.13673 z m 0.0408,47.25505 v -39.49027 l 17.85493,0.007 v 39.48347 z m 89.58062,0 0.007,-39.40868 h -9.70938 v -5.86098 l 9.71618,-0.007 -0.0136,-7.99596 h 17.86853 v 7.98916 h 9.66859 v 5.87458 h -9.66859 l 0.0136,39.40868 z m -162.244609,0 0.0068,-59.37818 h 18.500859 l 25.59252,41.40766 -0.0136,-41.40766 h 18.35808 v 59.37818 h -18.33089 l -25.7285,-41.40767 v 41.40767 z"
style="fill:#ffffff;stroke-width:1"
id="path29" />
</g>
<style
type="text/css"
id="style7">.logo{fill:#939598}</style>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>NordVPN</title><path d="M2.2838 21.5414A11.9866 11.9866 0 010 14.4832C0 7.8418 5.3727 2.4586 12 2.4586c6.6279 0 12 5.3832 12 12.0246a11.9853 11.9853 0 01-2.2838 7.0582l-5.7636-9.3783-.5565.9419.5645 2.6186L12 8.9338l-2.45 4.1447.5707 2.6451-2.0764-3.5555-5.7605 9.3733z"/></svg>

After

Width:  |  Height:  |  Size: 356 B

View File

Before

Width:  |  Height:  |  Size: 902 B

After

Width:  |  Height:  |  Size: 902 B

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="600px" height="600px" viewBox="0 0 600 600" version="1.1" xmlns="http://www.w3.org/2000/svg">
<g id="layer1" stroke="none" stroke-width="1">
<ellipse style="fill: rgb(36, 157, 241); fill-rule: evenodd; stroke: rgb(255, 255, 255); stroke-width: 0;" transform="matrix(-0.674571, 0.73821, -0.73821, -0.674571, 556.833239, 241.613465)" cx="216.308" cy="152.076" rx="296.855" ry="296.855"/>
<path d="M 280.949 172.514 L 355.429 162.714 L 282.909 326.374 L 282.909 326.374 C 295.649 325.394 308.142 321.067 320.389 313.394 L 320.389 313.394 L 320.389 313.394 C 332.642 305.714 343.916 296.077 354.209 284.484 L 354.209 284.484 L 354.209 284.484 C 364.496 272.884 373.396 259.981 380.909 245.774 L 380.909 245.774 L 380.909 245.774 C 388.422 231.561 393.812 217.594 397.079 203.874 L 397.079 203.874 L 397.079 203.874 C 399.039 195.381 399.939 187.214 399.779 179.374 L 399.779 179.374 L 399.779 179.374 C 399.612 171.534 397.569 164.674 393.649 158.794 L 393.649 158.794 L 393.649 158.794 C 389.729 152.914 383.766 148.177 375.759 144.584 L 375.759 144.584 L 375.759 144.584 C 367.759 140.991 356.899 139.194 343.179 139.194 L 343.179 139.194 L 343.179 139.194 C 327.172 139.194 311.409 141.807 295.889 147.034 L 295.889 147.034 L 295.889 147.034 C 280.376 152.261 266.002 159.857 252.769 169.824 L 252.769 169.824 L 252.769 169.824 C 239.542 179.784 228.029 192.197 218.229 207.064 L 218.229 207.064 L 218.229 207.064 C 208.429 221.924 201.406 238.827 197.159 257.774 L 197.159 257.774 L 197.159 257.774 C 195.526 263.981 194.546 268.961 194.219 272.714 L 194.219 272.714 L 194.219 272.714 C 193.892 276.474 193.812 279.577 193.979 282.024 L 193.979 282.024 L 193.979 282.024 C 194.139 284.477 194.462 286.357 194.949 287.664 L 194.949 287.664 L 194.949 287.664 C 195.442 288.971 195.852 290.277 196.179 291.584 L 196.179 291.584 L 196.179 291.584 C 179.519 291.584 167.349 288.234 159.669 281.534 L 159.669 281.534 L 159.669 281.534 C 151.996 274.841 150.119 263.164 154.039 246.504 L 154.039 246.504 L 154.039 246.504 C 157.959 229.191 166.862 212.694 180.749 197.014 L 180.749 197.014 L 180.749 197.014 C 194.629 181.334 211.122 167.531 230.229 155.604 L 230.229 155.604 L 230.229 155.604 C 249.342 143.684 270.249 134.214 292.949 127.194 L 292.949 127.194 L 292.949 127.194 C 315.656 120.167 337.789 116.654 359.349 116.654 L 359.349 116.654 L 359.349 116.654 C 378.296 116.654 394.219 119.347 407.119 124.734 L 407.119 124.734 L 407.119 124.734 C 420.026 130.127 430.072 137.234 437.259 146.054 L 437.259 146.054 L 437.259 146.054 C 444.446 154.874 448.936 165.164 450.729 176.924 L 450.729 176.924 L 450.729 176.924 C 452.529 188.684 451.959 200.934 449.019 213.674 L 449.019 213.674 L 449.019 213.674 C 445.426 229.027 438.646 244.464 428.679 259.984 L 428.679 259.984 L 428.679 259.984 C 418.719 275.497 406.226 289.544 391.199 302.124 L 391.199 302.124 L 391.199 302.124 C 376.172 314.697 358.939 324.904 339.499 332.744 L 339.499 332.744 L 339.499 332.744 C 320.066 340.584 299.406 344.504 277.519 344.504 L 277.519 344.504 L 275.069 344.504 L 212.839 484.154 L 142.279 484.154 L 280.949 172.514 Z" transform="matrix(1, 0, 0, 1, 0, 0)" style="fill: rgb(255, 255, 255); fill-rule: nonzero; white-space: pre;"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -0,0 +1,20 @@
<svg version="1.1" id="Layer_1" xmlns:x="ns_extend;" xmlns:i="ns_ai;" xmlns:graph="ns_graphs;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 70.5 33.5" style="enable-background:new 0 0 70.5 33.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:#007DC5;}
</style>
<metadata>
<sfw xmlns="ns_sfw;">
<slices>
</slices>
<sliceSourceBounds bottomLeftOrigin="true" height="33.5" width="70.5" x="-228.2" y="-213.4">
</sliceSourceBounds>
</sfw>
</metadata>
<g>
<path class="st0" d="M26,33.5h7.4V14.8c0-1-0.4-2-1.1-2.6l-11-11C20.7,0.4,19.7,0,18.7,0H0v7.4h20.4c3.1,0,5.6,2.5,5.6,5.6V33.5z">
</path>
<path class="st0" d="M44.5,33.5h-7.4V14.8c0-1,0.4-2,1.1-2.6l11-11C49.9,0.4,50.8,0,51.8,0h18.7v7.4H50.1c-3.1,0-5.6,2.5-5.6,5.6
V33.5z">
</path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 846 B

View File

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@@ -0,0 +1 @@
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 720 720" xml:space="preserve"><style>.st0{fill:#1d4ed8}</style><path class="st0" d="M402.8 425H705v259.9H402.8z"/><circle vector-effect="non-scaling-stroke" class="st0" cx="553.9" cy="429.9" r="151.1"/><circle vector-effect="non-scaling-stroke" class="st0" cx="553.9" cy="144.8" r="109.7"/><path d="M174.2 180.3H383v140.6c0 87.8-71.3 159.2-159.2 159.2h-49.7C86.3 480 15 412.9 15 330.2c0-82.8 71.3-149.9 159.2-149.9m-66.7 92v28.9c2.5-2.9 4.9-5.1 7.2-6.8 2.4-1.7 5-2.9 7.8-3.7 2.9-.8 5.9-1.3 9.2-1.3 5 0 9.3 1 13.2 3.1 3.8 2.1 6.8 5.1 9 9.1 1.4 2.3 2.3 4.9 2.8 7.8s.7 6.2.7 10v37.3c0 3.9-.9 6.9-2.7 8.9s-4.2 3-7.1 3c-6.4 0-9.6-4-9.6-11.9v-32.9c0-6.2-.9-11-2.8-14.4s-5.4-5-10.6-5c-3.5 0-6.6 1-9.4 3s-4.9 4.7-6.2 8.1c-1 2.9-1.6 8.1-1.6 15.5v25.8c0 3.9-.9 6.8-2.6 8.8s-4.2 3-7.2 3c-6.4 0-9.6-4-9.6-11.9v-84.5c0-4 .8-6.9 2.5-8.9s4.1-3 7.1-3q4.65 0 7.2 3 2.7 3.15 2.7 9m85.5 50.4h35.3q-.75-10.05-5.4-15c-3.1-3.3-7.2-5-12.3-5-4.9 0-8.8 1.7-12 5-3 3.5-4.9 8.5-5.6 15m84.8 48.4 1.8-4.4-24-60.4c-1.5-3.5-2.2-6-2.2-7.6 0-1.7.4-3.2 1.3-4.6s2-2.6 3.5-3.4c1.5-.9 3.1-1.3 4.7-1.3 2.8 0 4.9.9 6.4 2.7 1.4 1.8 2.7 4.3 3.8 7.7l16.5 48 15.6-44.6c1.2-3.6 2.4-6.4 3.4-8.5 1-2 2.1-3.4 3.2-4.1s2.7-1.1 4.7-1.1q2.25 0 4.2 1.2c1.4.8 2.4 1.8 3.1 3.2.7 1.3 1.1 2.7 1.1 4.2q-.3 1.35-.9 3.9c-.4 1.7-1 3.4-1.6 5.1L297 373.4c-2.2 5.9-4.3 10.4-6.4 13.8-2.1 3.3-4.9 5.9-8.3 7.7-3.5 1.8-8.1 2.7-14 2.7-5.7 0-10-.6-12.8-1.9-2.9-1.2-4.3-3.5-4.3-6.8 0-2.2.7-4 2-5.2q2.1-1.8 6-1.8c1 0 2.1.1 3.1.4 1.2.3 2.3.4 3.2.4 2.2 0 4-.3 5.3-1s2.4-1.8 3.5-3.5c1-1.5 2.2-3.9 3.5-7.1m-46.7-37.3H193q0 6.6 2.7 11.7c1.7 3.4 4 5.9 6.9 7.6s6.1 2.6 9.5 2.6c2.3 0 4.5-.3 6.4-.8s3.8-1.4 5.6-2.6 3.5-2.4 5-3.7 3.5-3.1 5.9-5.4c1-.9 2.4-1.3 4.3-1.3 2 0 3.6.5 4.9 1.6 1.2 1.1 1.9 2.6 1.9 4.6 0 1.8-.7 3.8-2.1 6.2s-3.5 4.6-6.2 6.8q-4.2 3.3-10.5 5.4c-4.2 1.4-9.1 2.1-14.5 2.1-12.5 0-22.3-3.6-29.2-10.7s-10.4-16.8-10.4-29.1c0-5.8.9-11.1 2.6-16s4.2-9.1 7.5-12.7c3.3-3.5 7.3-6.2 12.1-8.1s10.1-2.8 16-2.8c7.6 0 14.1 1.6 19.6 4.8 5.4 3.2 9.5 7.4 12.2 12.5s4.1 10.3 4.1 15.6c0 4.9-1.4 8.1-4.2 9.5-2.9 1.5-6.9 2.2-12 2.2" style="fill-rule:evenodd;clip-rule:evenodd;fill:#1d4ed8"/></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,22 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="logosandtypes_com" data-name="logosandtypes com" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150">
<defs>
<style>
.cls-1 {
fill: none;
}
.cls-2 {
fill: #005ed9;
}
</style>
</defs>
<g id="Layer_3" data-name="Layer 3">
<g id="Layer_3-2" data-name="Layer 3">
<g id="Layer_2" data-name="Layer 2">
<path id="Layer_3-3" data-name="Layer 3" class="cls-1" d="M0,0H150V150H0V0Z"/>
</g>
</g>
</g>
<path class="cls-2" d="M133.15,14.8h-7.69v7.69h7.69v-7.69Zm-26.9,53.84v-15.4h0s15.37,0,15.37,0v15.38h15.37c.26,14.25-.82,26.68-8.06,39.12-20.96,36.88-72.74,41.85-100.21,9.49h0c-6.41-7.45-11.02-16.51-13.18-26.18-1.1-5.25-1.58-11.92-1.58-17.55V15.76h30.75l.06,58.57c.15,7.58,1.52,15.37,6.05,21.31,13.04,17.66,40.64,16.06,51.33-3.18,3.84-6.42,4.19-16.61,4.09-23.82h0Zm3.84-42.31h11.53v11.53h15.38v15.38h-15.38v-15.37h-11.53v-11.53Z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg xmlns="http://www.w3.org/2000/svg"
aria-label="Ubiquiti" role="img"
viewBox="0 0 512 512"><rect
width="512" height="512"
rx="15"
fill="#399cdb"/><path d="M112 94v18h18V94h-18zm288 0c-82 0-90 31-90 61v172a147 147 0 01-3 28c43-9 72-36 86-82l7-23V94zm-234 18v18h18v-18h-18zm-18 18v18h18v-18h-18zm36 9v18h18v-18h-18zm-72 4v147c0 73 53 128 144 128 0 0-54-30-54-91V197h-18v66h-18v-39h-18v17h-18v-98h-18zm54 18v18h18v-18h-18zm-18 27v18h18v-18h-18zm252 87c-19 64-65 92-131 89-24-1-43-7-57-16 10 42 46 63 48 64l10 6c82-5 130-59 130-128v-15z" fill="#ffffff"/></svg>

Before

Width:  |  Height:  |  Size: 968 B

After

Width:  |  Height:  |  Size: 679 B

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="400px" height="400px" viewBox="1754.66 549.858 400 400" enable-background="new 1754.66 549.858 400 400"
xml:space="preserve">
<g>
<g id="deeditor_bgCarrier">
<rect id="dee_c_e" x="1754.66" y="549.858" fill="#1043B8" width="400" height="400"/>
</g>
<g>
<path fill="#E6E7E8" d="M2137.105,669.97l-45.542,18.7c0,0,45.358-18.52,45.358-18.701h-131.485v2.541
c-0.184,4.357-0.918,8.534-2.204,12.347c-1.652,5.446-4.224,10.531-7.713,14.888c-4.591,6.173-10.65,11.439-17.813,14.888
c-0.184,0-0.367,0.182-0.367,0.182c-0.367,0.18-0.734,0.362-1.286,0.544h-0.184c-0.367,0.182-0.367,0.182-0.551,0.182h-0.184
V669.97h-50.134c-0.918,0-1.836,0.726-1.836,1.634v7.262c1.469-1.999,3.856-3.269,6.611-3.269c1.469,0,2.938,0.364,4.04,1.09
c0.184,0,0.367,0.182,0.551,0.182c0.551,0.362,0.918,0.726,1.285,0.906c1.47,1.091,2.755,2.362,3.856,3.813l2.571,3.995
l5.142,8.17l-13.957,21.786c-0.734-0.362-1.285-0.542-2.203-1.088c-6.945-3.615-13.023-8.695-17.813-14.888
c-3.319-4.537-5.921-9.559-7.713-14.888c-1.12-3.853-1.858-7.806-2.203-11.803c0-1.088-0.184-2.177-0.184-3.085h-130.751
l44.991,18.701l-45.176-18.519c1.47,5.083,3.306,9.985,5.143,14.888l35.259,14.888h-28.465c2.571,5.083,5.326,10.167,8.447,14.888
l60.785,14.888h-50.501c4.04,5.266,8.264,10.167,12.671,14.888l78.414,15.252h-62.621c6.428,5.446,13.223,10.349,20.385,14.888
l82.638,14.889h-54.357c20.935,8.896,43.522,13.98,67.396,14.889h14.324c23.873-0.908,46.645-6.174,67.396-14.889h-54.357
l82.821-14.889c7.162-4.541,13.957-9.622,20.384-14.888h-62.621l78.414-14.888c4.407-4.722,8.631-9.805,12.671-14.889h-50.5
l60.784-14.89c2.938-4.901,5.877-9.803,8.447-14.888h-28.647l35.259-14.888C2133.984,679.955,2135.637,675.054,2137.105,669.97"/>
<path fill="#99999B" d="M1951.63,685.402c3.854,0,6.979-3.088,6.979-6.899c0-3.812-3.124-6.898-6.979-6.898
s-6.979,3.089-6.979,6.898C1944.651,682.314,1947.777,685.402,1951.63,685.402"/>
<path fill="#E7E7E6" d="M2005.62,669.97h-0.184v2.541c-0.184,4.357-0.918,8.534-2.204,12.347
c-1.652,5.446-4.224,10.531-7.713,14.888c-4.591,6.173-10.65,11.439-17.813,14.888c-0.184,0-0.367,0.182-0.367,0.182
c-0.367,0.181-0.734,0.363-1.286,0.544h-0.184c-0.367,0.182-0.367,0.182-0.551,0.182h-0.184V669.97h-50.134
c-0.918,0-1.836,0.726-1.836,1.634v7.262c1.469-1.999,3.856-3.269,6.611-3.269c1.469,0,2.938,0.364,4.04,1.09
c0.184,0,0.367,0.182,0.551,0.182c0.551,0.362,0.918,0.726,1.285,0.906c1.47,1.091,2.755,2.362,3.856,3.813l2.571,3.995
l5.142,8.17l-13.957,21.786c-0.734-0.362-1.285-0.542-2.203-1.088c-6.945-3.615-13.023-8.695-17.813-14.888
c-3.319-4.537-5.921-9.559-7.713-14.888c-1.12-3.853-1.858-7.806-2.203-11.803c0-1.088-0.184-2.177-0.184-3.085h-130.751
l44.991,18.701l1.469,0.544l1.286,0.908l134.424,99.316l134.424-99.134l1.285-0.908l1.47-0.544c0,0,45.358-18.519,45.358-18.701
H2005.62z M1951.813,673.057c2.388,0,4.407,1.997,4.407,4.357c0,2.361-2.02,4.357-4.407,4.357s-4.407-1.997-4.407-4.357
C1947.406,675.054,1949.426,673.057,1951.813,673.057"/>
<path fill="#CED4D4" d="M2137.105,669.97l-45.542,18.7l-1.47,0.544l-1.285,0.908l-134.24,99.134l-134.607-99.132l-1.286-0.908
l-1.469-0.544l-44.992-18.701c1.47,5.083,3.306,9.985,5.143,14.888l35.259,14.888h-28.465c2.571,5.083,5.326,10.167,8.447,14.888
l60.785,14.888h-50.501c4.04,5.266,8.264,10.167,12.671,14.888l78.414,15.252h-62.621c6.428,5.446,13.223,10.349,20.385,14.888
l82.638,14.889h-54.357c20.935,8.896,43.522,13.98,67.396,14.889h14.324c23.873-0.908,46.645-6.174,67.396-14.889h-54.357
l82.821-14.889c7.162-4.541,13.957-9.622,20.384-14.888h-62.621l78.414-14.888c4.407-4.722,8.631-9.805,12.671-14.889h-50.5
l60.784-14.89c2.938-4.901,5.877-9.803,8.447-14.888h-28.647l35.259-14.888C2133.984,679.955,2135.637,675.054,2137.105,669.97"/>
<path fill="#0055A2" d="M1970.359,726.256h-74.741l17.263,29.412h86.678l17.262-29.412H1970.359z"/>
<path fill="#CE2832" d="M1999.559,755.668h-29.199v49.93l16.16-27.596L1999.559,755.668z"/>
<path fill="#F2F2F2" d="M1942.08,755.668v49.93l14.141,24.331l14.141-24.331v-49.93H1942.08z"/>
<path fill="#CE2832" d="M1940.426,755.668h-27.545L1925.919,778l16.16,27.598v-49.93H1940.426z"/>
<path fill="#FFFFFF" d="M1956.219,732.426l2.388,4.903l5.325,0.727l-3.855,3.813l0.918,5.266l-4.774-2.542l-4.959,2.542
l1.103-5.266l-4.041-3.813l5.51-0.727L1956.219,732.426z M1984.684,732.426l2.387,4.903l5.51,0.727l-4.04,3.813l0.918,5.266
l-4.774-2.542l-4.774,2.542l0.918-5.266l-3.856-3.813l5.325-0.727L1984.684,732.426z M1927.571,732.426l2.571,4.903l5.325,0.727
l-3.856,3.813l0.919,5.266l-4.959-2.542l-4.774,2.542l0.918-5.266l-3.856-3.813l5.326-0.727L1927.571,732.426z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 96 96">
<g style="mix-blend-mode:difference">
<path fill="white" fill-rule="evenodd" d="M47.77,1A47,47,0,1,1,1,48.23V48A46.87,46.87,0,0,1,47.71,1Zm0,9a38.12,38.12,0,0,1,19.13,71A82.23,82.23,0,0,0,69.84,54.5c2.44.69,3.82,1.08,6.27,1.87A128.54,128.54,0,0,0,66.2,36.09,81.28,81.28,0,0,1,53.06,54.25l7.84-.49c-6.75,12.12-16.27,18-28.33,19.71-2.75-13.71-.69-36,14.7-46.48l1.56,7.48c3-4.83,8.93-11.22,13.34-15.67a41.77,41.77,0,0,0-22.83-2.15c1.27,1.09,2.84,2.47,4.11,3.55C26.1,27.57,16.57,39.68,10.3,53.76A38.3,38.3,0,0,1,47.77,9.94Z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 634 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
<circle cx="512" cy="512" r="512" style="fill:#df1b1a"/>
<path d="M512 256c-141 0-255.7 114.2-255.7 255.7C256.3 653.3 370.5 768 512 768s255.7-115.3 255.7-256.3S653.5 256 512 256zm104.5 435.3c12.9-45 18.2-91.1 16.1-144.2 13.4 3.8 20.9 5.9 34.3 10.2-15.5-39.1-32.2-74.5-54.2-110.4-19.3 37-45.6 71.8-71.8 99.2l42.9-2.7c-37 65.9-89 98.1-154.9 107.2-15-74.5-3.8-196.2 80.4-253.1l8.6 40.7c16.6-26.3 48.8-61.1 72.9-85.2-38.1-15-82-19.8-124.9-11.8 7 5.9 15.5 13.4 22.5 19.3-94.9 40.2-146.9 106.2-181.2 182.8-1.6-10.2-2.1-20.9-2.1-31.1 0-114.7 92.8-207.5 207-207.5 114.7 0 207.5 92.8 207.5 207.5-.1 76.2-41.4 143.2-103.1 179.1z" style="fill:#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 865 B

View File

@@ -0,0 +1 @@
<svg data-name="Layer 1" viewBox="0 0 100 100" width="100" height="100" xmlns="http://www.w3.org/2000/svg"><path d="M36.907 4.866s-.886 17.406 2.163 25.78c-4.782 4.193-10.152 8.97-10.992 10.12-1.383 1.896-.351 10.035-5.008 13.495-2.347 1.742-7.423 5.036-11.881 7.875-4.395 2.798-8.19 5.152-8.19 5.152s1.472 1.471 3.786 3.432c3.927 3.327 10.273 8.063 15.937 9.408 2.482.589 5.448.303 8.553-.315a73 73 0 0 0 3.092-.693c6.223-1.522 12.542-3.63 16.312-2.143a4.9 4.9 0 0 1 1.662 1.063c1.966 1.935 3.105 3.853 3.76 5.494.219.547.382 1.063.506 1.54.248.95.332 1.74.354 2.292a6 6 0 0 1-.018.867s.319-.53.797-1.414c1.434-2.652 4.304-8.49 4.316-12.775 0 0 .186.098.504.299s.768.502 1.295.912c1.318 1.024 3.117 2.716 4.543 5.146a16.7 16.7 0 0 1 1.979 5.186c.535 2.672.503 5.843-.534 9.549 0 0 .228-.22.62-.627 2.738-2.857 13.431-15.019 9.24-26.795 0 0 2.258 1.105 4.638 2.925.595.456 1.197.954 1.774 1.493 1.441 1.347 2.723 2.937 3.318 4.674q.18.52.27 1.058s1.178-4.477.185-9.732a21 21 0 0 0-.435-1.84c-1.019-3.569-3.157-7.29-7.395-10.09 0 0 .61-.09 1.606-.156s2.38-.108 3.923-.012c.772.048 1.584.13 2.409.262 2.474.394 5.062 1.229 7.004 2.886 0 0-.038-.183-.125-.51-.611-2.284-3.648-11.622-13.131-14.804 0 0 8.243-2.074 12.117-7.633 0 0-3.578-.009-7.402-.763a28 28 0 0 1-2.297-.55c-1.516-.432-2.965-1.009-4.133-1.775l-.012-.031c-.207-.64-3.59-10.958-7.644-16.82a82 82 0 0 0-9.17-10.867s-6.478 9.16-7.971 17.072c0 0-1.614-.505-3.99-.363l.01-.02s-3.634-3.942-8.832-10.092-7.512-7.16-7.512-7.16z" fill="#50474d" stroke="#fff" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" paint-order="stroke fill markers"/><path d="M36.91 4.863s-1.118 21.902 3.455 28.392c4.572 6.49 12.89-11.14 12.89-11.14s-3.633-3.943-8.831-10.092-7.514-7.16-7.514-7.16" fill="#50474d"/><path d="M89.706 77.861c-.962-5.735-10.001-10.15-10.001-10.15 4.79 13.459-9.858 27.42-9.858 27.42 4.148-14.82-7.788-21.09-7.788-21.09-.016 5.712-5.112 14.19-5.112 14.19s.639-5.034-4.603-10.194c-3.797-3.735-12.908.157-21.065 1.772-3.105.617-6.071.905-8.554.316-5.664-1.345-12.009-6.081-15.937-9.409-2.314-1.96-3.786-3.432-3.786-3.432s3.796-2.353 8.19-5.152c4.459-2.839 9.535-6.133 11.882-7.875 4.657-3.46 3.624-11.598 5.007-13.493 1.385-1.897 17.458-15.771 17.458-15.771 5.937-4.396 11.697-2.495 11.697-2.495 1.493-7.912 7.97-17.071 7.97-17.071a82 82 0 0 1 9.17 10.866c4.055 5.862 7.438 16.18 7.645 16.82l.01.032c4.672 3.064 13.833 3.086 13.833 3.086-3.874 5.559-12.117 7.633-12.117 7.633C94.585 47.5 97.002 59.178 97.002 59.178c-5.178-4.42-14.941-2.98-14.941-2.98 11.37 7.511 7.645 21.663 7.645 21.663" fill="#5f5358"/><path d="M32.896 53.522s2.977-5.13 4.849-5.962 8.812-1.69 8.812-1.69-3.436 4.739-5.825 5.297c-2.388.558-7.836 2.355-7.836 2.355" fill="#efe5b6"/><path d="M11.392 67.886c-.287.572-2.023 1.429-2.21 1.58-.184.153-.24-.822-.24-.822l-1.482-.19-.306 1.254-.366 1.008c-2.314-1.96-3.786-3.432-3.786-3.432s3.796-2.353 8.19-5.152c0 0 .489 5.184.2 5.754m78.314 9.975c-.962-5.735-10.001-10.15-10.001-10.15 4.79 13.459-9.858 27.42-9.858 27.42 4.148-14.82-7.788-21.09-7.788-21.09-.016 5.712-5.112 14.19-5.112 14.19s.639-5.034-4.603-10.194c-3.797-3.735-12.908.157-21.065 1.772 0 0 10.42-6.481 18.06-6.289s8.868 4.436 8.868 4.436 2.056-6.791.157-10.31c0 0 7.45-.641 13.206 3.23 0 0-2.3-9.532-7.585-11.71 0 0 8.575-1.607 13.548.622 0 0 .966-5.154-6.411-8.438 0 0 6.675-1.915 12.723-.041 0 0-4.525-7.29-10.312-9.015 0 0 9.039-1.497 11.896-3.51a15.6 15.6 0 0 1-3.398-5.639c4.672 3.064 13.833 3.086 13.833 3.086-3.874 5.559-12.117 7.633-12.117 7.633 10.838 3.637 13.255 15.314 13.255 15.314-5.178-4.42-14.941-2.98-14.941-2.98 11.37 7.511 7.645 21.663 7.645 21.663M66.061 11.993s6.107 8.076 6.856 13.876c.75 5.801-.285 8.9-.285 8.9s-3.086-5.19-8.535-8.297c-5.45-3.107 1.964-14.48 1.964-14.48z" fill="#50474d"/></svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 503 B

After

Width:  |  Height:  |  Size: 503 B

View File

@@ -0,0 +1,3 @@
description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions:

View File

@@ -82,9 +82,9 @@ PODS:
- qr_code_scanner (0.2.0):
- Flutter
- MTBBarcodeScanner
- SDWebImage (5.19.7):
- SDWebImage/Core (= 5.19.7)
- SDWebImage/Core (5.19.7)
- SDWebImage (5.20.0):
- SDWebImage/Core (= 5.20.0)
- SDWebImage/Core (5.20.0)
- Sentry/HybridSDK (8.36.0)
- sentry_flutter (8.9.0):
- Flutter
@@ -245,7 +245,7 @@ SPEC CHECKSUMS:
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
privacy_screen: 1a131c052ceb3c3659934b003b0d397c2381a24e
qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e
SDWebImage: 8a6b7b160b4d710e2a22b6900e25301075c34cb3
SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8
Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57
sentry_flutter: 0eb93e5279eb41e2392212afe1ccd2fecb4f8cbe
share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad
@@ -260,4 +260,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: b4e3a7eabb03395b66e81fc061789f61526ee6bb
COCOAPODS: 1.15.2
COCOAPODS: 1.16.2

View File

@@ -444,6 +444,100 @@
"$(inherited)",
"@executable_path/Frameworks",
);
OTHER_LDFLAGS = (
"$(inherited)",
"-l\"swiftCoreGraphics\"",
"-framework",
"\"AVFoundation\"",
"-framework",
"\"AVKit\"",
"-framework",
"\"DKImagePickerController\"",
"-framework",
"\"DKPhotoGallery\"",
"-framework",
"\"Foundation\"",
"-framework",
"\"ImageIO\"",
"-framework",
"\"LocalAuthentication\"",
"-framework",
"\"MTBBarcodeScanner\"",
"-framework",
"\"OrderedSet\"",
"-framework",
"\"Photos\"",
"-framework",
"\"QuartzCore\"",
"-framework",
"\"SDWebImage\"",
"-framework",
"\"Sentry\"",
"-framework",
"\"SwiftyGif\"",
"-framework",
"\"Toast\"",
"-framework",
"\"UIKit\"",
"-framework",
"\"app_links\"",
"-framework",
"\"connectivity_plus\"",
"-framework",
"\"device_info_plus\"",
"-framework",
"\"file_picker\"",
"-framework",
"\"file_saver\"",
"-framework",
"\"fk_user_agent\"",
"-framework",
"\"flutter_email_sender\"",
"-framework",
"\"flutter_inappwebview_ios\"",
"-framework",
"\"flutter_local_authentication\"",
"-framework",
"\"flutter_local_notifications\"",
"-framework",
"\"flutter_native_splash\"",
"-framework",
"\"flutter_secure_storage\"",
"-framework",
"\"fluttertoast\"",
"-framework",
"\"local_auth_darwin\"",
"-framework",
"\"move_to_background\"",
"-framework",
"\"package_info_plus\"",
"-framework",
"\"path_provider_foundation\"",
"-framework",
"\"privacy_screen\"",
"-framework",
"\"qr_code_scanner\"",
"-framework",
"\"sentry_flutter\"",
"-framework",
"\"share_plus\"",
"-framework",
"\"shared_preferences_foundation\"",
"-framework",
"\"sodium_libs\"",
"-framework",
"\"sqflite\"",
"-framework",
"\"sqlite3\"",
"-framework",
"\"sqlite3_flutter_libs\"",
"-framework",
"\"url_launcher_ios\"",
"-weak_framework",
"\"LinkPresentation\"",
"-weak_framework",
SwiftUI,
);
PRODUCT_BUNDLE_IDENTIFIER = io.ente.auth;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -592,6 +686,100 @@
"$(inherited)",
"@executable_path/Frameworks",
);
OTHER_LDFLAGS = (
"$(inherited)",
"-l\"swiftCoreGraphics\"",
"-framework",
"\"AVFoundation\"",
"-framework",
"\"AVKit\"",
"-framework",
"\"DKImagePickerController\"",
"-framework",
"\"DKPhotoGallery\"",
"-framework",
"\"Foundation\"",
"-framework",
"\"ImageIO\"",
"-framework",
"\"LocalAuthentication\"",
"-framework",
"\"MTBBarcodeScanner\"",
"-framework",
"\"OrderedSet\"",
"-framework",
"\"Photos\"",
"-framework",
"\"QuartzCore\"",
"-framework",
"\"SDWebImage\"",
"-framework",
"\"Sentry\"",
"-framework",
"\"SwiftyGif\"",
"-framework",
"\"Toast\"",
"-framework",
"\"UIKit\"",
"-framework",
"\"app_links\"",
"-framework",
"\"connectivity_plus\"",
"-framework",
"\"device_info_plus\"",
"-framework",
"\"file_picker\"",
"-framework",
"\"file_saver\"",
"-framework",
"\"fk_user_agent\"",
"-framework",
"\"flutter_email_sender\"",
"-framework",
"\"flutter_inappwebview_ios\"",
"-framework",
"\"flutter_local_authentication\"",
"-framework",
"\"flutter_local_notifications\"",
"-framework",
"\"flutter_native_splash\"",
"-framework",
"\"flutter_secure_storage\"",
"-framework",
"\"fluttertoast\"",
"-framework",
"\"local_auth_darwin\"",
"-framework",
"\"move_to_background\"",
"-framework",
"\"package_info_plus\"",
"-framework",
"\"path_provider_foundation\"",
"-framework",
"\"privacy_screen\"",
"-framework",
"\"qr_code_scanner\"",
"-framework",
"\"sentry_flutter\"",
"-framework",
"\"share_plus\"",
"-framework",
"\"shared_preferences_foundation\"",
"-framework",
"\"sodium_libs\"",
"-framework",
"\"sqflite\"",
"-framework",
"\"sqlite3\"",
"-framework",
"\"sqlite3_flutter_libs\"",
"-framework",
"\"url_launcher_ios\"",
"-weak_framework",
"\"LinkPresentation\"",
"-weak_framework",
SwiftUI,
);
PRODUCT_BUNDLE_IDENTIFIER = io.ente.auth;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";

View File

@@ -72,7 +72,7 @@ class _AppState extends State<App>
}
});
locale = widget.locale;
UpdateService.instance.shouldUpdate().then((shouldUpdate) {
UpdateService.instance.showUpdateNotification().then((shouldUpdate) {
if (shouldUpdate) {
Future.delayed(Duration.zero, () {
showDialog(
@@ -112,7 +112,10 @@ class _AppState extends State<App>
@override
Widget build(BuildContext context) {
if (Platform.isAndroid || kDebugMode) {
if (Platform.isAndroid ||
Platform.isWindows ||
Platform.isLinux ||
kDebugMode) {
return AdaptiveTheme(
light: lightThemeData,
dark: darkThemeData,

View File

@@ -7,8 +7,11 @@ const String sentryDSN =
"https://ed4ddd6309b847ba8849935e26e9b648@sentry.ente.io/9";
const String sentryTunnel = "https://sentry-reporter.ente.io";
const String roadmapURL = "https://roadmap.ente.io";
const String githubIssuesUrl =
"https://github.com/ente-io/ente/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc";
const String kAccountsUrl = "https://accounts.ente.io";
const String githubFeatureRequestUrl =
"https://github.com/ente-io/ente/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+requests%22+label%3A%22-+auth%22+sort%3Atop";
const int microSecondsInDay = 86400000000;
const int android11SDKINT = 30;
const int galleryLoadStartTime = -8000000000000000; // Wednesday, March 6, 1748

View File

@@ -435,8 +435,6 @@
"customEndpoint": "متصل بـ{endpoint}",
"pinText": "ثبت",
"unpinText": "ألغِ التثبيت",
"pinnedCodeMessage": "ثُبِّت {code}",
"unpinnedCodeMessage": "أُلغِي تثبيت {code}",
"tags": "الأوسمة",
"createNewTag": "أنشيء وسم جديد",
"tag": "وسم",

View File

@@ -148,7 +148,7 @@
"hintForMobile": "Натиснете продължително код, за да го редактирате или премахнете.",
"hintForDesktop": "Натиснете десен бутон върху код, за да го редактирате или премахнете.",
"scan": "Сканиране",
"scanACode": "Скениране на код",
"scanACode": "Сканиране на код",
"verify": "Потвърждаване",
"verifyEmail": "Потвърдете имейла",
"enterCodeHint": "Въведете 6-цифрения код от\nВашето приложение за удостоверяване",
@@ -156,6 +156,7 @@
"twoFactorAuthTitle": "Двуфакторно удостоверяване",
"passkeyAuthTitle": "Удостоверяване с ключ за парола",
"verifyPasskey": "Потвърдете ключ за парола",
"loginWithTOTP": "Влизане с еднократен код",
"recoverAccount": "Възстановяване на акаунт",
"enterRecoveryKeyHint": "Въведете Вашия ключ за възстановяване",
"recover": "Възстановяване",
@@ -199,7 +200,7 @@
"sorryUnableToGenCode": "За съжаление не може да се генерира код за {issuerName}",
"noResult": "Няма резултати",
"addCode": "Добавяне на код",
"scanAQrCode": "Скениране на QR код",
"scanAQrCode": "Сканиране на QR код",
"enterDetailsManually": "Въведете подробности ръчно",
"edit": "Редактиране",
"share": "Споделяне",
@@ -327,6 +328,10 @@
}
}
},
"manualSort": "Персонализирано",
"editOrder": "Промяна на подредбата",
"mostFrequentlyUsed": "Често използвани",
"mostRecentlyUsed": "Последно използвани",
"activeSessions": "Активни сесии",
"somethingWentWrongPleaseTryAgain": "Нещо се обърка, моля опитайте отново",
"thisWillLogYouOutOfThisDevice": "Това ще Ви изкара от профила на това устройство!",
@@ -444,10 +449,11 @@
"invalidEndpointMessage": "За съжаление въведената от Вас крайна точка е невалидна. Моля, въведете валидна крайна точка и опитайте отново.",
"endpointUpdatedMessage": "Крайната точка е актуализирана успешно",
"customEndpoint": "Свързан към {endpoint}",
"pinText": "ПИН код",
"pinText": "Закачане",
"unpinText": "Откачане",
"pinnedCodeMessage": "{code} е закачен",
"unpinnedCodeMessage": "{code} е откачен",
"pinned": "Закачен",
"tags": "Етикети",
"createNewTag": "Създаване на етикет",
"tag": "Етикет",

View File

@@ -446,8 +446,6 @@
"customEndpoint": "Connectat a {endpoint}",
"pinText": "Fixa",
"unpinText": "Desfixa",
"pinnedCodeMessage": "{code} fixat",
"unpinnedCodeMessage": "{code} deixat de fixar",
"tags": "Etiquetes",
"createNewTag": "Crea una nova etiqueta",
"tag": "Etiqueta",

View File

@@ -446,8 +446,6 @@
"customEndpoint": "Forbindelse oprettet til {endpoint}",
"pinText": "Fastgør",
"unpinText": "Frigør",
"pinnedCodeMessage": "{code} er blevet fastgjort",
"unpinnedCodeMessage": "{code} er blevet frigjort",
"tags": "Tags",
"createNewTag": "Opret nyt tag",
"tag": "Tag",

View File

@@ -444,8 +444,6 @@
"customEndpoint": "Mit {endpoint} verbunden",
"pinText": "Anpinnen",
"unpinText": "Lösen",
"pinnedCodeMessage": "{code} wurde angepinnt",
"unpinnedCodeMessage": "{code} wurde Losgelöst",
"tags": "Tags",
"createNewTag": "Neuen Tag erstellen",
"tag": "Tag",

View File

@@ -156,6 +156,7 @@
"twoFactorAuthTitle": "Αυθεντικοποίηση δύο παραγόντων",
"passkeyAuthTitle": "Επιβεβαίωση κλειδιού πρόσβασης",
"verifyPasskey": "Επιβεβαίωση κλειδιού πρόσβασης",
"loginWithTOTP": "Είσοδος με TOTP",
"recoverAccount": "Ανάκτηση λογαριασμού",
"enterRecoveryKeyHint": "Εισάγετε το κλειδί ανάκτησης σας",
"recover": "Ανάκτηση",
@@ -327,6 +328,10 @@
}
}
},
"manualSort": "Προσαρμοσμένο",
"editOrder": "Επεξεργασία σειράς",
"mostFrequentlyUsed": "Συχνά χρησιμοποιούμενο",
"mostRecentlyUsed": "Πρόσφατα χρησιμοποιούμενο",
"activeSessions": "Ενεργές συνεδρίες",
"somethingWentWrongPleaseTryAgain": "Κάτι πήγε στραβά, παρακαλώ προσπαθήστε ξανά",
"thisWillLogYouOutOfThisDevice": "Αυτό θα σας αποσυνδέσει από αυτή τη συσκευή!",
@@ -446,8 +451,9 @@
"customEndpoint": "Συνδεδεμένο στο {endpoint}",
"pinText": "Καρφίτσωμα",
"unpinText": "Ξεκαρφίτσωμα",
"pinnedCodeMessage": "Το {code} καρφιτσώθηκε",
"unpinnedCodeMessage": "Το {code} ξεκαρφιτσώθηκε",
"pinnedCodeMessage": "{code} έχει καρφιτσωθεί",
"unpinnedCodeMessage": "Το {code} έχει ξεκαρφιτσωθεί",
"pinned": "Καρφιτσωμένο",
"tags": "Ετικέτες",
"createNewTag": "Δημιουργία Νέας Ετικέτας",
"tag": "Ετικέτα",

View File

@@ -258,6 +258,10 @@
"areYouSureYouWantToLogout": "Are you sure you want to logout?",
"yesLogout": "Yes, logout",
"exit": "Exit",
"theme": "Theme",
"lightTheme": "Light",
"darkTheme": "Dark",
"systemTheme": "System",
"verifyingRecoveryKey": "Verifying recovery key...",
"recoveryKeyVerified": "Recovery key verified",
"recoveryKeySuccessBody": "Great! Your recovery key is valid. Thank you for verifying.\n\nPlease remember to keep your recovery key safely backed up.",
@@ -328,6 +332,10 @@
}
}
},
"manualSort": "Custom",
"editOrder": "Edit order",
"mostFrequentlyUsed": "Frequently used",
"mostRecentlyUsed": "Recently used",
"activeSessions": "Active sessions",
"somethingWentWrongPleaseTryAgain": "Something went wrong, please try again",
"thisWillLogYouOutOfThisDevice": "This will log you out of this device!",
@@ -449,6 +457,7 @@
"unpinText": "Unpin",
"pinnedCodeMessage": "{code} has been pinned",
"unpinnedCodeMessage": "{code} has been unpinned",
"pinned": "Pinned",
"tags": "Tags",
"createNewTag": "Create New Tag",
"tag": "Tag",
@@ -485,5 +494,13 @@
"appLockNotEnabled": "App lock not enabled",
"appLockNotEnabledDescription": "Please enable app lock from Security > App Lock",
"authToViewPasskey": "Please authenticate to view passkey",
"appLockOfflineModeWarning": "You have chosen to proceed without backups. If you forget your applock, you will be locked out from accessing your data."
"appLockOfflineModeWarning": "You have chosen to proceed without backups. If you forget your applock, you will be locked out from accessing your data.",
"duplicateCodes": "Duplicate codes",
"noDuplicates": "✨ No duplicates",
"youveNoDuplicateCodesThatCanBeCleared": "You've no duplicate codes that can be cleared",
"deduplicateCodes": "Deduplicate codes",
"deselectAll": "Deselect all",
"selectAll": "Select all",
"deleteDuplicates": "Delete duplicates",
"plainHTML": "Plain HTML"
}

View File

@@ -6,38 +6,55 @@
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Asegure sus códigos 2FA",
"onBoardingBody": "Realice una copia de seguridad segura de sus códigos 2FA",
"onBoardingGetStarted": "Primeros pasos",
"setupFirstAccount": "Configura tu primera cuenta",
"importScanQrCode": "Escanear un código QR",
"qrCode": "Código QR",
"importEnterSetupKey": "Ingrese una llave de configuración",
"importEnterSetupKey": "Ingrese una clave de configuración",
"importAccountPageTitle": "Ingrese los detalles de la cuenta",
"secretCanNotBeEmpty": "El secreto no puede estar vacío",
"bothIssuerAndAccountCanNotBeEmpty": "El emisor y la cuenta no pueden estar vacíos",
"bothIssuerAndAccountCanNotBeEmpty": "Ni el emisor ni la cuenta pueden estar vacíos",
"incorrectDetails": "Detalles incorrectos",
"pleaseVerifyDetails": "Por favor, confirma los detalles e intentar otra vez",
"pleaseVerifyDetails": "Por favor, confirma los detalles e inténtalo de nuevo",
"codeIssuerHint": "Emisor",
"codeSecretKeyHint": "Llave Secreta",
"codeSecretKeyHint": "Clave secreta",
"secret": "Secreto",
"all": "Todos",
"notes": "Notas",
"notesLengthLimit": "Las notas pueden tener como máximo {count} caracteres",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
"count": {
"description": "The maximum number of characters allowed for notes",
"type": "int",
"example": "100"
}
}
},
"codeAccountHint": "Cuenta (tu@dominio.com)",
"codeTagHint": "Marcado",
"accountKeyType": "Tipo de llave",
"codeTagHint": "Etiqueta",
"accountKeyType": "Tipo de clave",
"sessionExpired": "La sesión ha expirado",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Por favor, vuelva a iniciar sesión",
"pleaseLoginAgain": "Por favor, vuelve a iniciar sesión",
"loggingOut": "Cerrando sesión...",
"timeBasedKeyType": "Basado en el tiempo (TOTP)",
"counterBasedKeyType": "Basado en Contador (HOTP)",
"counterBasedKeyType": "Basado en contador (HOTP)",
"saveAction": "Guardar",
"nextTotpTitle": "siguiente",
"deleteCodeTitle": "¿Eliminar código?",
"deleteCodeMessage": "¿Está seguro que desea eliminar este código? Esta acción es irreversible.",
"deleteCodeMessage": "¿Estás seguro de que quieres eliminar este código? Esta acción es irreversible.",
"trashCode": "¿Enviar código a la papelera?",
"trashCodeMessage": "¿Estás seguro de que quieres enviar el código de la cuenta {account} a la papelera?",
"trash": "Papelera",
"viewLogsAction": "Ver Registros",
"sendLogsDescription": "Esto enviará registros para ayudarnos a depurar su problema. Aunque tomamos precauciones para asegurarnos que no se registre información sensible, le recomendamos que consulte estos registros antes de compartirlos.",
"preparingLogsTitle": "Preparando registros...",
"emailLogsTitle": "Enviar registros por email",
"emailLogsTitle": "Enviar registros por correo electrónico",
"emailLogsMessage": "Por favor, envíe los registros a {email}",
"@emailLogsMessage": {
"placeholders": {
@@ -65,9 +82,9 @@
"merchandise": "Mercancías",
"verifyPassword": "Verificar contraseña",
"pleaseWait": "Por favor, espere...",
"generatingEncryptionKeysTitle": "Generando claves de encriptación...",
"generatingEncryptionKeysTitle": "Generando claves de cifrado...",
"recreatePassword": "Recrear contraseña",
"recreatePasswordMessage": "El dispositivo actual no es lo suficientemente potente para verificar su contraseña, así que necesitamos regenerarlo una vez de una manera que funcione con todos los dispositivos.\n\nPor favor Inicie sesión usando su clave de recuperación y regenere su contraseña (puede volver a utilizar la misma si lo desea).",
"recreatePasswordMessage": "El dispositivo actual no es lo suficientemente potente como para verificar tu contraseña, por lo que debemos regenerarlo una vez de una manera que funcione con todos los dispositivos.\n\nPor favor, inicia sesión con tu clave de recuperación y regenera tu contraseña (puedes volver a usar la misma si lo deseas).",
"useRecoveryKey": "Usar clave de recuperación",
"incorrectPasswordTitle": "Contraseña incorrecta",
"welcomeBack": "¡Te damos la bienvenida otra vez!",
@@ -79,32 +96,33 @@
"data": "Datos",
"importCodes": "Importar códigos",
"importTypePlainText": "Texto sin formato",
"importTypeEnteEncrypted": "Exportación cifrada Ente",
"passwordForDecryptingExport": "Contraseña para descifrar exportación",
"importTypeEnteEncrypted": "Exportación cifrada de Ente",
"passwordForDecryptingExport": "Contraseña para descifrar la exportación",
"passwordEmptyError": "La contraseña no puede estar vacía",
"importFromApp": "Importar códigos de {appName}",
"importGoogleAuthGuide": "Exportar tus cuentas desde Google Authenticator a un código QR usando la opción \"Transferir Cuentas\". A continuación, usando otro dispositivo, escanee el código QR.\n\nConsejo: Puede usar la webcam de su portátil para tomar una foto del código QR.",
"importGoogleAuthGuide": "Exporta tus cuentas desde Google Authenticator a un código QR usando la opción \"Transferir Cuentas\". A continuación, usando otro dispositivo, escanea el código QR.\n\nConsejo: Puedes usar la webcam de tu portátil para tomar una foto del código QR.",
"importSelectJsonFile": "Seleccione el archivo JSON",
"importSelectAppExport": "Seleccione el archivo de exportación de {appName}",
"importEnteEncGuide": "Seleccione el archivo JSON cifrado exportado desde Ente",
"importRaivoGuide": "Utilice la opción \"Exportar códigos a un archivo de Zip\" en la configuración de Raivo.\n\nExtraiga el archivo zip e importe el archivo JSON.",
"importBitwardenGuide": "Use la opción \"Exportar caja fuerte\" dentro del menú Herramientas de Bitwarden e importe el fichero JSON no cifrado.",
"importAegisGuide": "Utilice la opción \"Exportar la bóveda\" en ajustes de Aegis.\n\nSi tu bóveda es cifrada, necesitara entrar contraseña de bóveda para descifrar la bóveda.",
"import2FasGuide": "Use la opción \"Configuración→Copia de seguridad→Exportar\" en 2FAS\n\nSi su copia de seguridad está cifrada, necesitará introducir la contraseña para descifrarla",
"importLastpassGuide": "Utilice la opción \"Transferir cuentas\" en la configuración del autenticador de Lastpass y pulse \"Exportar cuentas al archivo\". Importe el archivo JSON descargado.",
"importRaivoGuide": "Utiliza la opción \"Exportar códigos a un archivo Zip\" en la configuración de Raivo.\n\nExtrae el archivo zip e importa el archivo JSON.",
"importBitwardenGuide": "Usa la opción \"Exportar caja fuerte\" dentro del menú Herramientas de Bitwarden e importe el fichero JSON sin cifrar.",
"importAegisGuide": "Utilice la opción \"Exportar la bóveda\" en ajustes de Aegis.\n\nSi tu bóveda es cifrada, necesitaras introducir la contraseña de la bóveda para descifrarla.",
"import2FasGuide": "Usa la opción \"Configuración→Copia de seguridad→Exportar\" en 2FAS\n\nSi tu copia de seguridad está cifrada, necesitará introducir la contraseña para descifrarla",
"importLastpassGuide": "Utiliza la opción \"Transferir cuentas\" en la configuración del autenticador de Lastpass y pulse \"Exportar cuentas al archivo\". Importe el archivo JSON descargado.",
"exportCodes": "Exportar códigos",
"importLabel": "Importar",
"importInstruction": "Por favor, seleccione un archivo que contenga una lista de sus códigos en el siguiente formato",
"importCodeDelimiterInfo": "Los códigos pueden separarse por una coma o una nueva línea",
"selectFile": "Seleccionar archivo",
"emailVerificationToggle": "Verificación de correo electrónico",
"emailVerificationEnableWarning": "Si estás guardando la autenticación de dos factores en tu correo electrónico con nosotros, activar la verificación de correo electrónico podría resultar en un punto muerto. Si está bloqueado fuera de un servicio, puede que no pueda iniciar sesión en el otro.",
"authToChangeEmailVerificationSetting": "Por favor, autentifíquese para cambiar su correo electrónico",
"authToViewYourRecoveryKey": "Por favor, autentifíquese para ver su clave de recuperación",
"authToChangeYourEmail": "Por favor, autentifíquese para cambiar su correo electrónico",
"authToChangeYourPassword": "Por favor, autentifíquese para cambiar su contraseña",
"authToViewSecrets": "Por favor, autentifíquese para ver sus secretos",
"authToInitiateSignIn": "Por favor, autentifíquese para iniciar la sesión para realizar la copia de seguridad.",
"emailVerificationEnableWarning": "Para evitar quedarte bloqueado fuera de tu cuenta, asegúrate de guardar una copia de tu código 2FA de tu correo electrónico fuera de Ente Auth antes de habilitar la verificación de correo electrónico.",
"authToChangeEmailVerificationSetting": "Por favor, autentícate para cambiar tu correo electrónico",
"authenticateGeneric": "Por favor, autentícate",
"authToViewYourRecoveryKey": "Por favor, autentícate para ver tu clave de recuperación",
"authToChangeYourEmail": "Por favor, autentícate para cambiar tu correo electrónico",
"authToChangeYourPassword": "Por favor, autentícate para cambiar tu contraseña",
"authToViewSecrets": "Por favor, autentícate para ver tus secretos",
"authToInitiateSignIn": "Por favor, autentícate para iniciar la sesión para realizar la copia de seguridad.",
"ok": "Ok",
"cancel": "Cancelar",
"yes": "Si",
@@ -114,32 +132,35 @@
"general": "General",
"settings": "Configuración",
"copied": "Copiado",
"pleaseTryAgain": "Por favor, inténtalo nuevamente",
"pleaseTryAgain": "Por favor, inténtalo de nuevo",
"existingUser": "Usuario existente",
"newUser": "Nuevo a Ente",
"newUser": "Nuevo en Ente",
"delete": "Borrar",
"enterYourPasswordHint": "Ingrese su contraseña",
"enterYourPasswordHint": "Introduce tu contraseña",
"forgotPassword": "Olvidé mi contraseña",
"oops": "Ups",
"suggestFeatures": "Sugerir funcionalidades",
"faq": "Preguntas Frecuentes",
"somethingWentWrongMessage": "Algo ha ido mal, por favor, prueba otra vez",
"somethingWentWrongMessage": "Algo ha ido mal, por favor, inténtalo de nuevo",
"leaveFamily": "Dejar plan familiar",
"leaveFamilyMessage": "¿Está seguro de que desea abandonar el plan familiar?",
"leaveFamilyMessage": "¿Estás seguro de que quieres abandonar el plan familiar?",
"inFamilyPlanMessage": "¡Estás en un plan familiar!",
"hintForMobile": "Mantén pulsado un código para editarlo o eliminarlo.",
"hintForDesktop": "Haz clic derecho en un código para editarlo o eliminarlo.",
"scan": "Escanear",
"scanACode": "Escanear un código",
"verify": "Verificar",
"verifyEmail": "Verificar correo electrónico",
"enterCodeHint": "Ingrese el código de seis dígitos de su aplicación de autenticación",
"lostDeviceTitle": "¿Perdió su dispositivo?",
"lostDeviceTitle": "¿Dispositivo perdido?",
"twoFactorAuthTitle": "Autenticación de dos factores",
"passkeyAuthTitle": "Verificación de llave de acceso",
"verifyPasskey": "Verificar llave de acceso",
"passkeyAuthTitle": "Verificación de clave de acceso",
"verifyPasskey": "Verificar clave de acceso",
"loginWithTOTP": "Inicio de sesión con TOTP",
"recoverAccount": "Recuperar cuenta",
"enterRecoveryKeyHint": "Introduzca su clave de recuperación",
"enterRecoveryKeyHint": "Introduce tu clave de recuperación",
"recover": "Recuperar",
"contactSupportViaEmailMessage": "Por favor, envíe un email a {email} desde su dirección de correo electrónico registrada",
"contactSupportViaEmailMessage": "Por favor, envía un correo electrónico a {email} desde la dirección de correo electrónico que usó durante el registro",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
@@ -148,20 +169,20 @@
}
},
"invalidQRCode": "Código QR no válido",
"noRecoveryKeyTitle": "¿Sin clave de recuperación?",
"noRecoveryKeyTitle": "¿No tienes la clave de recuperación?",
"enterEmailHint": "Introduce tu dirección de correo electrónico",
"invalidEmailTitle": "Dirección de correo electrónico no válida",
"invalidEmailMessage": "Por favor, introduzca una dirección de correo electrónico válida.",
"invalidEmailMessage": "Por favor, introduce una dirección de correo electrónico válida.",
"deleteAccount": "Eliminar cuenta",
"deleteAccountQuery": "Lamentaremos que te vayas. ¿Estás enfrentando algún inconveniente?",
"deleteAccountQuery": "Lamentamos que te vayas. ¿Estás teniendo algún problema?",
"yesSendFeedbackAction": "Sí, enviar comentarios",
"noDeleteAccountAction": "No, eliminar cuenta",
"initiateAccountDeleteTitle": "Por favor, autentifíquese para iniciar la eliminación de la cuenta",
"initiateAccountDeleteTitle": "Por favor, autentícate para iniciar la eliminación de la cuenta",
"sendEmail": "Enviar correo electrónico",
"createNewAccount": "Crear nueva cuenta",
"createNewAccount": "Crear cuenta nueva",
"weakStrength": "Poco segura",
"strongStrength": "Fuerte",
"moderateStrength": "Moderado",
"strongStrength": "Segura",
"moderateStrength": "Moderada",
"confirmPassword": "Confirmar contraseña",
"close": "Cerrar",
"oopsSomethingWentWrong": "Vaya, algo salió mal.",
@@ -170,10 +191,10 @@
"social": "Social",
"security": "Seguridad",
"lockscreen": "Pantalla de bloqueo",
"authToChangeLockscreenSetting": "Por favor autentifíquese para cambiar la configuración de bloqueo de pantalla",
"deviceLockEnablePreSteps": "Para activar el bloqueo de la aplicación, por favor configure el código de acceso del dispositivo o el bloqueo de pantalla en los ajustes del sistema.",
"authToChangeLockscreenSetting": "Por favor autentícate para cambiar la configuración de bloqueo de pantalla",
"deviceLockEnablePreSteps": "Para activar el bloqueo de la aplicación, por favor configura el código de acceso del dispositivo o el bloqueo de pantalla en los ajustes de tu sistema.",
"viewActiveSessions": "Ver sesiones activas",
"authToViewYourActiveSessions": "Por favor, autentifíquese para ver sus sesiones activas",
"authToViewYourActiveSessions": "Por favor, autentícate para ver tus sesiones activas",
"searchHint": "Buscar...",
"search": "Buscar",
"sorryUnableToGenCode": "Lo sentimos, no se puede generar un código para {issuerName}",
@@ -182,18 +203,22 @@
"scanAQrCode": "Escanear un código QR",
"enterDetailsManually": "Ingrese los detalles manualmente",
"edit": "Editar",
"share": "Compartir",
"shareCodes": "Compartir código",
"shareCodesDuration": "Selecciona la duración durante la cual deseas compartir el código.",
"restore": "Restaurar",
"copiedToClipboard": "Copiado al portapapeles",
"copiedNextToClipboard": "Copiado el siguiente código al portapapeles",
"error": "Error",
"recoveryKeyCopiedToClipboard": "Llave de recuperación copiada al portapapeles",
"recoveryKeyOnForgotPassword": "Si olvida su contraseña, la única forma de recuperar sus datos es con esta clave.",
"recoveryKeySaveDescription": "Nosotros no almacenamos esta clave, por favor guarde dicha clave de 24 palabras en un lugar seguro.",
"recoveryKeyCopiedToClipboard": "Clave de recuperación copiada al portapapeles",
"recoveryKeyOnForgotPassword": "Si olvidas tu contraseña, la única forma de recuperar tus datos es con esta clave.",
"recoveryKeySaveDescription": "Nosotros no almacenamos esta clave, por favor guarda esta clave de 24 palabras en un lugar seguro.",
"doThisLater": "Hacer esto más tarde",
"saveKey": "Guardar Clave",
"saveKey": "Guardar clave",
"save": "Guardar",
"send": "Enviar",
"saveOrSendDescription": "¿Desea guardar esto en el almacenamiento (carpeta Descargas por defecto) o enviarlo a otras aplicaciones?",
"saveOnlyDescription": "¿Desea guardar esto en el almacenamiento (carpeta Descargas por defecto)?",
"saveOrSendDescription": "¿Desea guardar el archivo en el almacenamiento (carpeta Descargas por defecto) o enviarlo a otras aplicaciones?",
"saveOnlyDescription": "¿Desea guardar el archivo en el almacenamiento (carpeta Descargas por defecto)?",
"back": "Atrás",
"createAccount": "Crear cuenta",
"passwordStrength": "Fortaleza de la contraseña: {passwordStrengthValue}",
@@ -217,11 +242,11 @@
"changePasswordTitle": "Cambiar contraseña",
"resetPasswordTitle": "Restablecer contraseña",
"encryptionKeys": "Claves de cifrado",
"passwordWarning": "No almacenamos esta contraseña, así que si la olvidas, <underline>no podemos descifrar tus datos</underline>",
"passwordWarning": "No almacenamos esta contraseña, así que si la olvidas, <underline>no podremos descifrar tus datos</underline>",
"enterPasswordToEncrypt": "Introduzca una contraseña que podamos usar para cifrar sus datos",
"enterNewPasswordToEncrypt": "Introduzca una nueva contraseña que podamos usar para cifrar sus datos",
"enterNewPasswordToEncrypt": "Introduzca una contraseña nueva que podamos usar para cifrar sus datos",
"passwordChangedSuccessfully": "Contraseña cambiada correctamente",
"generatingEncryptionKeys": "Generando claves de encriptación...",
"generatingEncryptionKeys": "Generando claves de cifrado...",
"continueLabel": "Continuar",
"insecureDevice": "Dispositivo inseguro",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Lo sentimos, no hemos podido generar claves seguras en este dispositivo.\n\nRegístrate desde un dispositivo diferente.",
@@ -230,31 +255,35 @@
"loginTerms": "Al hacer clic en iniciar sesión, acepto los <u-terms>términos de servicio</u-terms> y <u-policy>la política de privacidad</u-policy>",
"logInLabel": "Iniciar sesión",
"logout": "Cerrar sesión",
"areYouSureYouWantToLogout": "¿Seguro que quiere cerrar la sesión?",
"yesLogout": "Sí, cerrar sesión",
"areYouSureYouWantToLogout": "¿Seguro que quieres cerrar la sesión?",
"yesLogout": "Sí, cerrar la sesión",
"exit": "Salir",
"theme": "Tema",
"lightTheme": "Claro",
"darkTheme": "Oscuro",
"systemTheme": "Sistema",
"verifyingRecoveryKey": "Verificando clave de recuperación...",
"recoveryKeyVerified": "Clave de recuperación verificada",
"recoveryKeySuccessBody": "¡Genial! Su clave de recuperación es válida. Gracias por verificar.\n\nPor favor, recuerde mantener su clave de recuperación segura.",
"invalidRecoveryKey": "La clave de recuperación introducida no es válida. Por favor, asegúrese de que contiene 24 palabras y compruebe la ortografía de cada una.\n\nSi ha introducido un código de recuperación antiguo, asegúrese de que tiene 64 caracteres de largo y compruebe cada uno de ellos.",
"invalidRecoveryKey": "La clave de recuperación introducida no es válida. Por favor, asegúrate de que contiene 24 palabras y comprueba la ortografía de cada una.\n\nSi has introducido un código de recuperación antiguo, asegúrate de que tiene 64 caracteres de largo y comprueba cada uno de ellos.",
"recreatePasswordTitle": "Recrear contraseña",
"recreatePasswordBody": "El dispositivo actual no es lo suficientemente potente para verificar su contraseña, pero podemos regenerarla de una manera que funcione con todos los dispositivos.\n\nPor favor inicie sesión usando su clave de recuperación y regenere su contraseña (puede volver a utilizar la misma si lo desea).",
"invalidKey": "Clave inválida",
"recreatePasswordBody": "El dispositivo actual no es lo suficientemente potente para verificar su contraseña, pero podemos regenerarla de manera que funcione con todos los dispositivos.\n\nPor favor inicie sesión usando su clave de recuperación y regenere su contraseña (puede volver a utilizar la misma si lo desea).",
"invalidKey": "Clave no válida",
"tryAgain": "Inténtelo de nuevo",
"viewRecoveryKey": "Ver código de recuperación",
"viewRecoveryKey": "Ver clave de recuperación",
"confirmRecoveryKey": "Confirmar clave de recuperación",
"recoveryKeyVerifyReason": "Su clave de recuperación es la única forma de recuperar sus fotos si olvida su contraseña. Puede encontrar su clave de recuperación en Ajustes > Cuenta.\n\nPor favor, introduzca su clave de recuperación aquí para verificar que la ha guardado correctamente.",
"confirmYourRecoveryKey": "Confirmar su clave de recuperación",
"recoveryKeyVerifyReason": "Tu clave de recuperación es la única forma de recuperar tus fotos si olvidas tu contraseña. Puedes encontrar tu clave de recuperación en Ajustes > Cuenta.\n\nPor favor, introduce tu clave de recuperación aquí para verificar que la has guardado correctamente.",
"confirmYourRecoveryKey": "Confirmar tu clave de recuperación",
"confirm": "Confirmar",
"emailYourLogs": "Envíe sus registros por correo electrónico",
"pleaseSendTheLogsTo": "Por favor, envíe los registros a {toEmail}",
"copyEmailAddress": "Copiar dirección de correo electrónico",
"exportLogs": "Exportar registros",
"enterYourRecoveryKey": "Introduzca su clave de recuperación",
"tempErrorContactSupportIfPersists": "Parece que algo salió mal. Por favor, vuelve a intentarlo después de algún tiempo. Si el error persiste, ponte en contacto con nuestro equipo de soporte.",
"enterYourRecoveryKey": "Introduce tu clave de recuperación",
"tempErrorContactSupportIfPersists": "Parece que algo salió mal. Por favor, vuelve a intentarlo pasado un tiempo. Si el error persiste, ponte en contacto con nuestro equipo de soporte.",
"networkHostLookUpErr": "No se puede conectar a Ente. Por favor, comprueba tu configuración de red y ponte en contacto con el soporte técnico si el error persiste.",
"networkConnectionRefusedErr": "No se puede conectar a Ente. Por favor, vuelve a intentarlo pasado un tiempo. Si el error persiste, ponte en contacto con el soporte técnico.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Parece que algo salió mal. Por favor, vuelve a intentarlo después de algún tiempo. Si el error persiste, ponte en contacto con nuestro equipo de soporte.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Parece que algo salió mal. Por favor, vuelve a intentarlo pasado un tiempo. Si el error persiste, ponte en contacto con nuestro equipo de soporte.",
"about": "Acerca de",
"weAreOpenSource": "¡Somos de código abierto!",
"privacy": "Privacidad",
@@ -266,14 +295,14 @@
"updateAvailable": "Actualización disponible",
"update": "Actualizar",
"checking": "Comprobando...",
"youAreOnTheLatestVersion": "Está usando la versión más reciente",
"youAreOnTheLatestVersion": "Estás usando la versión más reciente",
"warning": "Atención",
"exportWarningDesc": "El archivo exportado contiene información confidencial. Por favor, guárdelo de forma segura.",
"iUnderStand": "Entiendo",
"exportWarningDesc": "El archivo exportado contiene información confidencial. Por favor, guárdalo de forma segura.",
"iUnderStand": "Lo entiendo",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "Por favor, autentifíquese para exportar sus códigos",
"authToExportCodes": "Por favor, autentícate para exportar tus códigos",
"importSuccessTitle": "¡Hurra!",
"importSuccessDesc": "¡Has importado {count} códigos!",
"@importSuccessDesc": {
@@ -288,11 +317,11 @@
"sorry": "Lo sentimos",
"importFailureDesc": "No se pudo analizar el archivo seleccionado.\n¡Por favor escriba a support@ente.io si necesita ayuda!",
"pendingSyncs": "Atención",
"pendingSyncsWarningBody": "Algunos de sus códigos no han sido respaldados.\n\nPor favor, asegúrese de tener una copia de seguridad de estos códigos antes de cerrar la sesión.",
"pendingSyncsWarningBody": "Algunos de tus códigos no tienen copia de seguridad.\n\nPor favor, asegúrate de tener una copia de seguridad de estos códigos antes de cerrar la sesión.",
"checkInboxAndSpamFolder": "Por favor revisa tu bandeja de entrada (y spam) para completar la verificación",
"tapToEnterCode": "Toca para introducir el código",
"resendEmail": "Reenviar correo electrónico",
"weHaveSendEmailTo": "Hemos enviado un correo a <green>{email}</green>",
"weHaveSendEmailTo": "Hemos enviado un correo electrónico a <green>{email}</green>",
"@weHaveSendEmailTo": {
"description": "Text to indicate that we have sent a mail to the user",
"placeholders": {
@@ -303,19 +332,23 @@
}
}
},
"manualSort": "Personalizado",
"editOrder": "Editar orden",
"mostFrequentlyUsed": "Usados frecuentemente",
"mostRecentlyUsed": "Usados recientemente",
"activeSessions": "Sesiones activas",
"somethingWentWrongPleaseTryAgain": "Algo ha ido mal, por favor, prueba otra vez",
"somethingWentWrongPleaseTryAgain": "Algo ha ido mal, por favor, inténtelo de nuevo",
"thisWillLogYouOutOfThisDevice": "¡Esto cerrará la sesión de este dispositivo!",
"thisWillLogYouOutOfTheFollowingDevice": "Esto cerrará la sesión del siguiente dispositivo:",
"terminateSession": "¿Terminar sesión?",
"terminate": "Terminar",
"thisDevice": "Este dispositivo",
"toResetVerifyEmail": "Para restablecer su contraseña, por favor verifique su correo electrónico primero.",
"toResetVerifyEmail": "Para restablecer tu contraseña, por favor verifica tu correo electrónico primero.",
"thisEmailIsAlreadyInUse": "Este correo electrónico ya está en uso",
"verificationFailedPleaseTryAgain": "Verificación fallida, por favor inténtalo de nuevo",
"yourVerificationCodeHasExpired": "Tu código de verificación ha expirado",
"incorrectCode": "Código incorrecto",
"sorryTheCodeYouveEnteredIsIncorrect": "Lo sentimos, el código que ha introducido es incorrecto",
"sorryTheCodeYouveEnteredIsIncorrect": "Lo sentimos, el código que has introducido es incorrecto",
"emailChangedTo": "Correo electrónico cambiado a {newEmail}",
"authenticationFailedPleaseTryAgain": "Error de autenticación, por favor inténtalo de nuevo",
"authenticationSuccessful": "¡Autenticación exitosa!",
@@ -330,30 +363,31 @@
"passwordToEncryptExport": "Contraseña para cifrar la exportación",
"export": "Exportar",
"useOffline": "Usar sin copias de seguridad",
"signInToBackup": "Inicia sesión para hacer copia de tus códigos",
"signInToBackup": "Inicia sesión para hacer una copia de seguridad tus códigos",
"singIn": "Iniciar sesión",
"sigInBackupReminder": "Por favor, exporte sus códigos para asegurarse de que tiene una copia de seguridad de la que puede restaurar.",
"offlineModeWarning": "Ha elegido proceder sin copia de seguridad. Por favor, tome copias de seguridad manuales para asegurarse de que sus códigos están seguros.",
"sigInBackupReminder": "Por favor, exporta tus códigos para asegurarte de que tienes una copia de seguridad de la que puedas restaurarlos.",
"offlineModeWarning": "Ha elegido proceder sin copia de seguridad. Por favor, realice copias de seguridad manuales para asegurarse de que sus códigos están seguros.",
"showLargeIcons": "Mostrar iconos grandes",
"compactMode": "Modo compacto",
"shouldHideCode": "Ocultar códigos",
"doubleTapToViewHiddenCode": "Puedes tocar dos veces en una entrada para ver el código",
"focusOnSearchBar": "Enfocar búsqueda al iniciar la aplicación",
"confirmUpdatingkey": "¿Estás seguro de que deseas actualizar la clave secreto?",
"confirmUpdatingkey": "¿Estás seguro de que deseas actualizar la clave secreta?",
"minimizeAppOnCopy": "Minimizar aplicación al copiar",
"editCodeAuthMessage": "Autenticar para editar código",
"deleteCodeAuthMessage": "Autenticar para borrar código",
"showQRAuthMessage": "Autenticar para mostrar código QR",
"confirmAccountDeleteTitle": "Confirmar eliminación de la cuenta",
"confirmAccountDeleteMessage": "Esta cuenta está vinculada a otras aplicaciones de Ente, si utilizas alguna. Se programará la eliminación de los datos cargados en todas las aplicaciones de Ente, y tu cuenta se eliminará permanentemente.",
"confirmAccountDeleteMessage": "Esta cuenta está vinculada a otras aplicaciones de Ente, si utilizas alguna. \n\nSe programará la eliminación de los datos cargados en todas las aplicaciones de Ente, y tu cuenta se eliminará permanentemente.",
"androidBiometricHint": "Verificar identidad",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "No reconocido. Inténtelo de nuevo.",
"androidBiometricNotRecognized": "No reconocido. Inténtalo de nuevo.",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "Realizado correctamente",
"androidBiometricSuccess": "Autenticación exitosa",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
@@ -361,11 +395,11 @@
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"androidSignInTitle": "Se requiere autenticación",
"androidSignInTitle": "Se necesita autenticación biométrica",
"@androidSignInTitle": {
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
},
"androidBiometricRequiredTitle": "Biométrica necesaria",
"androidBiometricRequiredTitle": "Se necesita autenticación biométrica",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
},
@@ -381,11 +415,11 @@
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
"androidGoToSettingsDescription": "La autenticación biométrica no está configurada en su dispositivo. Vaya a 'Ajustes > Seguridad' para añadir autenticación biométrica.",
"androidGoToSettingsDescription": "La autenticación biométrica no está configurada en tu dispositivo. Ve a 'Ajustes > Seguridad' para configurar la autenticación biométrica.",
"@androidGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side."
},
"iOSLockOut": "La autenticación biométrica está deshabilitada. Por favor bloquee y desbloquee la pantalla para habilitarla.",
"iOSLockOut": "La autenticación biométrica está deshabilitada. Por favor bloquea y desbloquea la pantalla para habilitarla.",
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
@@ -399,61 +433,73 @@
},
"noInternetConnection": "No hay conexión a Internet",
"pleaseCheckYourInternetConnectionAndTryAgain": "Compruebe su conexión a Internet e inténtelo de nuevo.",
"signOutFromOtherDevices": "Cerrar sesión desde otros dispositivos",
"signOutOtherBody": "Si cree que alguien puede conocer su contraseña, puede forzar a todos los demás dispositivos que usen su cuenta a cerrar la sesión.",
"signOutOtherDevices": "Cerrar la sesión de otros dispositivos",
"signOutFromOtherDevices": "Cerrar sesión en otros dispositivos",
"signOutOtherBody": "Si crees que alguien puede conocer tu contraseña, puedes forzar a todos los demás dispositivos que usen tu cuenta a cerrar la sesión.",
"signOutOtherDevices": "Cerrar la sesión en otros dispositivos",
"doNotSignOut": "No cerrar la sesión",
"hearUsWhereTitle": "¿Cómo conoció Ente? (opcional)",
"hearUsExplanation": "No rastreamos las aplicaciones instaladas. ¡Nos ayudaría si nos dijera dónde nos encontró!",
"hearUsExplanation": "No rastreamos la instalación de las aplicaciones. ¡Nos ayudaría si nos dijera dónde nos encontró!",
"recoveryKeySaved": "¡Clave de recuperación guardada en la carpeta Descargas!",
"waitingForBrowserRequest": "Esperando la solicitud del navegador...",
"waitingForVerification": "Esperando verificación...",
"passkey": "Llave de acceso",
"passkey": "Clave de acceso",
"passKeyPendingVerification": "La verificación todavía está pendiente",
"loginSessionExpired": "La sesión ha expirado",
"loginSessionExpiredDetails": "Tu sesión ha expirado. Por favor, vuelve a iniciar sesión.",
"developerSettingsWarning": "¿Estás seguro de que quieres modificar los ajustes de desarrollador?",
"developerSettings": "Ajustes de desarrollador",
"serverEndpoint": "Punto final del servidor",
"invalidEndpoint": "Punto final no válido",
"invalidEndpointMessage": "Lo sentimos, el punto final introducido no es válido. Por favor, introduce un punto final válido y vuelve a intentarlo.",
"endpointUpdatedMessage": "Punto final actualizado con éxito",
"serverEndpoint": "Endpoint del servidor",
"invalidEndpoint": "Endpoint no válido",
"invalidEndpointMessage": "Lo sentimos, el endpoint introducido no es válido. Por favor, introduce un endpoint válido y vuelve a intentarlo.",
"endpointUpdatedMessage": "Endpoint actualizado con éxito",
"customEndpoint": "Conectado a {endpoint}",
"pinText": "Fijar",
"pinText": "Anclar",
"unpinText": "Desanclar",
"pinnedCodeMessage": "{code} ha sido anclado",
"unpinnedCodeMessage": "{code} ha sido desanclado",
"pinned": "Anclado",
"tags": "Etiquetas",
"createNewTag": "Crear Nueva Etiqueta",
"tag": "Etiqueta",
"create": "Crear",
"editTag": "Editar Etiqueta",
"editTag": "Editar etiqueta",
"deleteTagTitle": "¿Eliminar etiqueta?",
"deleteTagMessage": "¿Estás seguro de que quieres eliminar esta etiqueta? Esta acción es irreversible.",
"somethingWentWrongParsingCode": "No se han podido analizar los códigos {x}.",
"updateNotAvailable": "Actualización no disponible",
"viewRawCodes": "Ver códigos raw",
"rawCodes": "Códigos raw",
"rawCodeData": "Datos del código raw",
"viewRawCodes": "Ver códigos en bruto",
"rawCodes": "Códigos en bruto",
"rawCodeData": "Datos de código en bruto",
"appLock": "Bloqueo de aplicación",
"noSystemLockFound": "Bloqueo del sistema no encontrado",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Para activar el bloqueo de la aplicación, por favor configure el código de acceso del dispositivo o el bloqueo de pantalla en los ajustes del sistema.",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Para activar el bloqueo de la aplicación, por favor configura el código de acceso del dispositivo o el bloqueo de pantalla en los ajustes del sistema.",
"autoLock": "Bloqueo automático",
"immediately": "De inmediato",
"immediately": "Inmediatamente",
"reEnterPassword": "Reescribe tu contraseña",
"reEnterPin": "Reescribe tu PIN",
"next": "Siguiente",
"tooManyIncorrectAttempts": "Demasiados intentos incorrectos",
"tapToUnlock": "Toca para desbloquear",
"setNewPassword": "Establece una nueva contraseña",
"deviceLock": "Dispositivo bloqueado",
"deviceLock": "Bloqueo del dispositivo",
"hideContent": "Ocultar contenido",
"hideContentDescriptionAndroid": "Oculta el contenido de la aplicación en el seleccionador de aplicaciones y desactiva las capturas de pantalla",
"hideContentDescriptioniOS": "Ocultar el contenido de la aplicación en el seleccionador de aplicaciones",
"hideContentDescriptionAndroid": "Oculta el contenido de la aplicación en el selector de aplicaciones y desactiva las capturas de pantalla",
"hideContentDescriptioniOS": "Ocultar el contenido de la aplicación en el selector de aplicaciones",
"autoLockFeatureDescription": "Tiempo tras el cual la aplicación se bloquea después de ser colocada en segundo plano",
"appLockDescription": "Elija entre la pantalla de bloqueo por defecto de su dispositivo y una pantalla de bloqueo personalizada con un PIN o contraseña.",
"pinLock": "Bloquear pin",
"pinLock": "Bloqueo con Pin",
"enterPin": "Ingresa el PIN",
"setNewPin": "Establecer nuevo PIN",
"importFailureDescNew": "No se pudo analizar el archivo seleccionado."
"importFailureDescNew": "No se pudo analizar el archivo seleccionado.",
"appLockNotEnabled": "Bloqueo de aplicación no activado",
"appLockNotEnabledDescription": "Por favor, activa el bloqueo de aplicación desde Seguridad > Bloqueo de aplicación",
"authToViewPasskey": "Por favor, autentícate para ver tu clave de acceso",
"appLockOfflineModeWarning": "Has elegido proceder sin copia de seguridad. Si olvidas el código de desbloqueo de la aplicación, se bloqueará el acceso a sus datos.",
"duplicateCodes": "Duplicar códigos",
"noDuplicates": "✨ No hay duplicados",
"youveNoDuplicateCodesThatCanBeCleared": "No tienes códigos duplicados que se puedan borrar",
"deduplicateCodes": "Desduplicar códigos",
"deselectAll": "Deseleccionar todo",
"selectAll": "Seleccionar todo",
"deleteDuplicates": "Eliminar duplicados"
}

View File

@@ -401,8 +401,6 @@
"customEndpoint": "متصل شده به {endpoint}",
"pinText": "پین",
"unpinText": "حذف پین",
"pinnedCodeMessage": "{code} پین شد",
"unpinnedCodeMessage": "{code} از پین حذف شد",
"tags": "برچسب‌ها",
"createNewTag": "ایجاد برچسب جدید",
"tag": "برچسب",

View File

@@ -445,8 +445,6 @@
"customEndpoint": "Connecté à {endpoint}",
"pinText": "Épingler",
"unpinText": "Désépingler",
"pinnedCodeMessage": "{code} a été épinglé",
"unpinnedCodeMessage": "{code} a été désépinglé",
"tags": "Tags",
"createNewTag": "Créer un nouveau tag",
"tag": "Tag",

View File

@@ -1,4 +1,83 @@
{
"account": "खाता",
"unlock": "खोलें"
"unlock": "खोलें",
"recoveryKey": "पुनःप्राप्ति कुंजी",
"counterAppBarTitle": "काउंटर",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingGetStarted": "प्रारंभ करें",
"setupFirstAccount": "अपना पहला अकाउंट सेटअप करें",
"importScanQrCode": "QR कोड स्कैन करें",
"qrCode": "QR कोड",
"importEnterSetupKey": "",
"importAccountPageTitle": "अकाउंट विवरण डालें",
"incorrectDetails": "ग़लत विवरण",
"pleaseVerifyDetails": "कृपया विवरण सत्यापित करें और पुनः प्रयास करें",
"codeIssuerHint": "जारीकर्ता",
"codeSecretKeyHint": "सीक्रेट कुंजी",
"secret": "सीक्रेट",
"all": "सभी",
"notes": "नोट्स",
"notesLengthLimit": "नोट्स अधिकतम {count} अक्षर लम्बे हो सकते हैं",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
"count": {
"description": "The maximum number of characters allowed for notes",
"type": "int",
"example": "100"
}
}
},
"codeAccountHint": "अकाउंट (you@domain.com)",
"codeTagHint": "टैग",
"sessionExpired": "सत्र की अवधि समाप्त",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "कृपया फिर से लॉगिन करें",
"loggingOut": "लॉग आउट हो रहा है...",
"saveAction": "सेव करें",
"viewLogsAction": "लॉग देखें",
"preparingLogsTitle": "लॉग तैयार किये जा रहे हैं...",
"emailLogsTitle": "लॉग ईमेल करें",
"emailLogsMessage": "कृपया {email} पर लॉग ईमेल करें",
"@emailLogsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"exportLogsAction": "लॉग एक्सपोर्ट करें",
"reportABug": "बग रिपोर्ट करें",
"reportBug": "बग रिपोर्ट करें",
"emailUsMessage": "कृपया हमें {email} पर ईमेल करें",
"@emailUsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"contactSupport": "सपोर्ट टीम से संपर्क करें",
"rateUsOnStore": "हमें {storeName} पर रेट करें",
"blog": "ब्लॉग",
"verifyPassword": "पासवर्ड सत्यापित करें",
"pleaseWait": "कृपया प्रतीक्षा करें...",
"incorrectPasswordTitle": "ग़लत पासवर्ड",
"welcomeBack": "आपका पुनः स्वागत है!",
"changeEmail": "ईमेल बदलें",
"changePassword": "पासवर्ड बदलें",
"data": "डेटा",
"passwordEmptyError": "पासवर्ड रिक्त नहीं हो सकता है",
"importLabel": "इंपोर्ट",
"selectFile": "फ़ाइल का चयन करें",
"emailVerificationToggle": "ईमेल सत्यापन",
"ok": "ठीक है",
"cancel": "रद्द करें",
"yes": "हाँ",
"no": "नहीं",
"settings": "सेटिंग"
}

View File

@@ -156,6 +156,7 @@
"twoFactorAuthTitle": "Autentikasi dua langkah",
"passkeyAuthTitle": "Verifikasi passkey",
"verifyPasskey": "Verifikasi passkey",
"loginWithTOTP": "Login menggunakan TOTP",
"recoverAccount": "Pulihkan akun",
"enterRecoveryKeyHint": "Masukkan kunci pemulihanmu",
"recover": "Pulihkan",
@@ -327,6 +328,10 @@
}
}
},
"manualSort": "Kustom",
"editOrder": "Ubah pesanan",
"mostFrequentlyUsed": "Sering digunakan",
"mostRecentlyUsed": "Baru digunakan",
"activeSessions": "Sesi aktif",
"somethingWentWrongPleaseTryAgain": "Ada yang salah. Mohon coba kembali",
"thisWillLogYouOutOfThisDevice": "Langkah ini akan mengeluarkan Anda dari gawai ini!",
@@ -446,8 +451,6 @@
"customEndpoint": "Terkoneksi ke {endpoint}",
"pinText": "Sematkan",
"unpinText": "Awasematkan",
"pinnedCodeMessage": "{code} telah disematkan",
"unpinnedCodeMessage": "{code} telah diawasematkan",
"tags": "Tanda",
"createNewTag": "Buat Tanda Baru",
"tag": "Tanda",

View File

@@ -156,6 +156,7 @@
"twoFactorAuthTitle": "Autenticazione a due fattori",
"passkeyAuthTitle": "Verifica della passkey",
"verifyPasskey": "Verifica passkey",
"loginWithTOTP": "Login con TOTP",
"recoverAccount": "Recupera account",
"enterRecoveryKeyHint": "Inserisci la tua chiave di recupero",
"recover": "Recupera",
@@ -327,6 +328,10 @@
}
}
},
"manualSort": "Personalizzato",
"editOrder": "Modifica ordine",
"mostFrequentlyUsed": "Utilizzato di frequente",
"mostRecentlyUsed": "Utilizzato di recente",
"activeSessions": "Sessioni attive",
"somethingWentWrongPleaseTryAgain": "Qualcosa è andato storto, per favore riprova",
"thisWillLogYouOutOfThisDevice": "Questo ti disconnetterà da questo dispositivo!",
@@ -448,6 +453,7 @@
"unpinText": "Sgancia",
"pinnedCodeMessage": "{code} è stato fissato",
"unpinnedCodeMessage": "{code} è stato sganciato",
"pinned": "Fissato",
"tags": "Tag",
"createNewTag": "Crea un nuovo tag",
"tag": "Tag",
@@ -484,5 +490,12 @@
"appLockNotEnabled": "Blocco app non abilitato",
"appLockNotEnabledDescription": "Si prega di abilitare il blocco dell'app da Sicurezza > Blocco App",
"authToViewPasskey": "Autenticati per visualizzare le tue passkey",
"appLockOfflineModeWarning": "Hai scelto di procedere senza backup. Se dimentichi il tuo codice di blocco dell'app, non potrai più accedere ai tuoi dati."
"appLockOfflineModeWarning": "Hai scelto di procedere senza backup. Se dimentichi il tuo codice di blocco dell'app, non potrai più accedere ai tuoi dati.",
"duplicateCodes": "Codici duplicati",
"noDuplicates": "✨ Nessun doppione",
"youveNoDuplicateCodesThatCanBeCleared": "Non ci sono codici duplicati che possono essere cancellati",
"deduplicateCodes": "Codici deduplicati",
"deselectAll": "Deselezionare tutti",
"selectAll": "Seleziona tutti",
"deleteDuplicates": "Elimina i duplicati"
}

View File

@@ -156,6 +156,7 @@
"twoFactorAuthTitle": "2 要素認証",
"passkeyAuthTitle": "パスキー認証",
"verifyPasskey": "パスキーの認証",
"loginWithTOTP": "TOTPでログイン",
"recoverAccount": "アカウントを回復",
"enterRecoveryKeyHint": "回復キーを入力",
"recover": "回復",
@@ -327,6 +328,10 @@
}
}
},
"manualSort": "カスタム",
"editOrder": "並べ替え",
"mostFrequentlyUsed": "よく使う",
"mostRecentlyUsed": "最近使った",
"activeSessions": "アクティブセッション",
"somethingWentWrongPleaseTryAgain": "問題が発生しました、再試行してください",
"thisWillLogYouOutOfThisDevice": "このデバイスからログアウトします!",
@@ -446,8 +451,9 @@
"customEndpoint": "{endpoint} に接続しました",
"pinText": "固定",
"unpinText": "固定を解除",
"pinnedCodeMessage": "{code} を固定しました",
"unpinnedCodeMessage": "{code} の固定が解除されました",
"pinnedCodeMessage": "{code}がピン留めされました",
"unpinnedCodeMessage": "{code}のピン留めが解除されました",
"pinned": "ピン留め",
"tags": "タグ",
"createNewTag": "新しいタグの作成",
"tag": "タグ",

View File

@@ -8,8 +8,8 @@
},
"onBoardingBody": "2단계 인증 코드를 안전하게 백업하세요",
"onBoardingGetStarted": "시작하기",
"setupFirstAccount": "첫번째 계정을 설정하세요",
"importScanQrCode": "QR 코드 스캔",
"setupFirstAccount": "첫 번째 계정을 설정하세요",
"importScanQrCode": "QR 코드 스캔하기",
"qrCode": "QR 코드",
"importEnterSetupKey": "설정 키 입력",
"importAccountPageTitle": "계정 상세 정보 입력",
@@ -19,7 +19,20 @@
"pleaseVerifyDetails": "입력된 정보를 확인하고 다시 시도하세요",
"codeIssuerHint": "발행인",
"codeSecretKeyHint": "비밀 키",
"secret": "비밀",
"all": "모든 항목",
"notes": "메모",
"notesLengthLimit": "메모는 최대 {count}자까지 적을 수 있습니다",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
"count": {
"description": "The maximum number of characters allowed for notes",
"type": "int",
"example": "100"
}
}
},
"codeAccountHint": "계정 (you@domain.com)",
"codeTagHint": "태그",
"accountKeyType": "키 종류",
@@ -55,7 +68,7 @@
"reportABug": "버그 제보",
"crashAndErrorReporting": "충돌 & 에러 보고",
"reportBug": "버그 제보",
"emailUsMessage": "{email} 로 이메일을 보내주세요.",
"emailUsMessage": "{email}로 이메일을 보내주세요.",
"@emailUsMessage": {
"placeholders": {
"email": {
@@ -64,7 +77,7 @@
}
},
"contactSupport": "지원 문의",
"rateUsOnStore": "{storeName} 에서 평가해주세요",
"rateUsOnStore": "{storeName}에서 평가해주세요",
"blog": "블로그",
"merchandise": "제품",
"verifyPassword": "비밀번호 확인",
@@ -75,7 +88,7 @@
"useRecoveryKey": "복구 키 사용",
"incorrectPasswordTitle": "올바르지 않은 비밀번호",
"welcomeBack": "돌아오신 것을 환영합니다!",
"madeWithLoveAtPrefix": "made with ❤️ at ",
"madeWithLoveAtPrefix": "❤️을 담아 만들었습니다 ",
"supportDevs": "<bold-green>ente</bold-green>를 구독하고 저희를 지원해주세요",
"supportDiscount": "쿠폰 코드 \"AUTH\"를 사용하고 첫 해 10% 할인 혜택을 받으세요",
"changeEmail": "이메일 변경",
@@ -86,22 +99,396 @@
"importTypeEnteEncrypted": "Ente로 암호화된 내보내기",
"passwordForDecryptingExport": "복호화용 비밀번호",
"passwordEmptyError": "비밀번호는 비어있을 수 없습니다",
"importFromApp": "{appName} 로부터 코드 불러오기",
"importFromApp": "{appName}로부터 코드 불러오기",
"importGoogleAuthGuide": "Google 인증기에서 \"계정 이전\" 옵션을 선택해 생성된 QR 코드를 이용해 계정들을 옮길 수 있습니다. 그 다음, 다른 디바이스를 이용하여 QR 코드를 스캔해주세요.\n\n힌트: 웹캠을 이용해 QR 코드를 촬영할 수 있습니다.",
"importSelectJsonFile": "JSON 파일 선택",
"importSelectAppExport": "{appName}의 내보낸 파일 선택하기",
"importEnteEncGuide": "Ente에서 내보낸 암호화된 JSON 파일 선택하기",
"importRaivoGuide": "Raivo의 설정에서 \"Zip 파일로 OTP 내보내기\"를 이용해주세요.\n\nZip 파일의 압축을 풀고 JSON 파일을 가져오세요.",
"importBitwardenGuide": "Bitwarden의 도구에서 \"보관함 내보내기\"를 선택하여 암호화되지 않은 JSON 파일을 불러오세요.",
"importAegisGuide": "Aegis의 설정에서 \"보관함 내보내기\"를 이용하세요.\n\n보관함이 암호화된 경우, 보관함의 복호화를 위해 보관함 비밀번호를 입력해야 할 수도 있습니다.",
"import2FasGuide": "2FAS의 옵션에서 \"설정 -> 백업 -> 내보내기\"를 이용하세요.\n\n백업이 암호화되었다면, 백업의 복호화를 위해 암호를 입력해야 할 수도 있습니다.",
"importLastpassGuide": "Lastpass 인증기의 설정에서 \"계정 이전하기\" 옵션 중 \"파일로 계정들 내보내기\"를 이용하세요. 다운로드 된 JSON 파일을 불러오세요.",
"exportCodes": "코드 내보내기",
"importLabel": "불러오기",
"importInstruction": "다음의 포맷에 맞춰 여러분의 코드가 들어있는 파일을 선택해주세요",
"importCodeDelimiterInfo": "코드는 쉼표 혹은 줄 단위로 구분할 수 있습니다",
"selectFile": "파일 선택",
"emailVerificationToggle": "이메일 검증",
"emailVerificationEnableWarning": "계정이 잠겨 손을 쓸 수 없는 상황에 대비하여, 이메일을 검증하기 전 메일로 전송된 Ente Auth의 2차 인증을 별도로 보관해두세요.",
"authToChangeEmailVerificationSetting": "이메일 검증을 변경하시려면 인증절차를 거쳐주세요",
"authenticateGeneric": "인증절차를 거쳐주세요",
"authToViewYourRecoveryKey": "당신의 복구 키를 확인하려면 인증절차를 거쳐주세요",
"authToChangeYourEmail": "이메일을 변경하려면 인증절차를 거쳐주세요",
"authToChangeYourPassword": "암호를 변경하려면 인증절차를 거쳐주세요",
"authToViewSecrets": "비밀 부분을 확인하려면 인증절차를 거쳐주세요",
"authToInitiateSignIn": "백업을 위해 로그인 상태를 초기화하려면 인증절차를 거쳐주세요",
"ok": "확인",
"cancel": "취소",
"yes": "네",
"no": "아니오",
"email": "이메일",
"support": "지원",
"general": "일반 설정",
"settings": "설정",
"copied": "복사 됨",
"pleaseTryAgain": "다시 시도해주세요.",
"existingUser": "기존 유저",
"pleaseTryAgain": "다시 시도해주세요",
"existingUser": "기존 사용자",
"newUser": "Ente에 새로 가입",
"delete": "삭제",
"enterYourPasswordHint": "패스워드 입력",
"forgotPassword": "패스워드 분실",
"enterYourPasswordHint": "암호 입력",
"forgotPassword": "암호 분실",
"oops": "이런!",
"suggestFeatures": "기능 제안",
"faq": "FAQ"
"faq": "FAQ",
"somethingWentWrongMessage": "뭔가 잘못된 것 같습니다, 다시 시도해주세요",
"leaveFamily": "패밀리에서 떠나기",
"leaveFamilyMessage": "가족 요금제에서 떠나시겠습니까?",
"inFamilyPlanMessage": "가족 요금제에 가입하셨습니다!",
"hintForMobile": "수정이나 삭제를 원하시면 코드를 길게 눌러주세요.",
"hintForDesktop": "수정이나 삭제를 원하시면 코드를 우클릭해주세요.",
"scan": "스캔하기",
"scanACode": "코드 스캔하기",
"verify": "인증",
"verifyEmail": "이메일 인증하기",
"enterCodeHint": "인증기에 적힌 여섯 자리 코드를 입력해주세요",
"lostDeviceTitle": "기기를 잃어버리셨나요?",
"twoFactorAuthTitle": "2단계 인증",
"passkeyAuthTitle": "패스키 검증",
"verifyPasskey": "패스키 확인",
"loginWithTOTP": "TOTP로 로그인 하기",
"recoverAccount": "계정 복구",
"enterRecoveryKeyHint": "복구 키를 입력하세요",
"recover": "복구",
"contactSupportViaEmailMessage": "당신이 등록한 이메일 주소에서 {email}로 메일 한 통을 보내주세요",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"invalidQRCode": "맞지 않는 QR 코드",
"noRecoveryKeyTitle": "복구 키가 없으세요?",
"enterEmailHint": "이메일 주소 입력",
"invalidEmailTitle": "잘못 된 이메일 주소",
"invalidEmailMessage": "유효한 이메일 주소를 입력해주세요",
"deleteAccount": "계정 삭제하기",
"deleteAccountQuery": "떠나신다니 아쉽습니다. 뭔가 문제가 있으셨나요?",
"yesSendFeedbackAction": "네, 피드백을 보냅니다",
"noDeleteAccountAction": "아니오, 계정을 지웁니다",
"initiateAccountDeleteTitle": "계정 삭제 절차를 시작하려면 인증절차를 거쳐주세요",
"sendEmail": "이메일 보내기",
"createNewAccount": "새 계정 만들기",
"weakStrength": "약함",
"strongStrength": "강함",
"moderateStrength": "보통",
"confirmPassword": "암호 확인",
"close": "닫기",
"oopsSomethingWentWrong": "이런, 뭔가 꼬였습니다.",
"selectLanguage": "언어 선택",
"language": "언어",
"social": "소셜",
"security": "보안",
"lockscreen": "화면 잠금",
"authToChangeLockscreenSetting": "화면 잠금 설정을 변경하시려면 인증절차를 거쳐주세요",
"deviceLockEnablePreSteps": "기기 잠금을 활성화하시려면, 기기의 암호를 만들거나 시스템 설정에서 화면 잠금을 설정해주세요.",
"viewActiveSessions": "활성화된 세션 확인하기",
"authToViewYourActiveSessions": "활성화된 세션을 확인하시려면 인증절차를 거쳐주세요",
"searchHint": "검색...",
"search": "찾기",
"sorryUnableToGenCode": "죄송합니다, {issuerName}의 코드를 생성할 수 없습니다",
"noResult": "결과 없음",
"addCode": "코드 추가하기",
"scanAQrCode": "QR 코드 스캔하기",
"enterDetailsManually": "속성을 수동으로 입력하기",
"edit": "수정",
"share": "공유",
"shareCodes": "코드 공유하기",
"shareCodesDuration": "코드 공유를 허용할 시간을 선택해주세요.",
"restore": "복구",
"copiedToClipboard": "클립보드에 복사 됨",
"copiedNextToClipboard": "클립보드에 다음번 코드 복사 됨",
"error": "에러",
"recoveryKeyCopiedToClipboard": "클립보드에 복구 키 복사 됨",
"recoveryKeyOnForgotPassword": "암호를 잊어버린 경우, 데이터를 복구하려면 이 키를 이용하는 방법 뿐입니다.",
"recoveryKeySaveDescription": "저희는 이 키를 보관하지 않사오니, 여기에 있는 24 단어로 구성된 키를 안전하게 보관해주세요.",
"doThisLater": "나중에 하기",
"saveKey": "키 저장하기",
"save": "저장",
"send": "보내기",
"saveOrSendDescription": "이것을 당신의 스토리지 (일반적으로 다운로드 폴더) 에 저장하시겠습니까, 아니면 다른 앱으로 전송하시겠습니까?",
"saveOnlyDescription": "이것을 당신의 스토리지 (일반적으로 다운로드 폴더) 에 저장하시겠습니까?",
"back": "뒤로 가기",
"createAccount": "계정 만들기",
"passwordStrength": "암호 보안 강도: {passwordStrengthValue}",
"@passwordStrength": {
"description": "Text to indicate the password strength",
"placeholders": {
"passwordStrengthValue": {
"description": "The strength of the password as a string",
"type": "String",
"example": "Weak or Moderate or Strong"
}
},
"message": "Password Strength: {passwordStrengthText}"
},
"password": "암호",
"signUpTerms": "나는 <u-terms>사용자 약관</u-terms>과 <u-policy>개인정보 취급방침</u-policy>에 동의합니다.",
"privacyPolicyTitle": "개인정보 취급방침",
"termsOfServicesTitle": "약관",
"encryption": "암호화",
"setPasswordTitle": "암호 지정",
"changePasswordTitle": "암호 변경",
"resetPasswordTitle": "암호 초기화",
"encryptionKeys": "암호화 키",
"passwordWarning": "저희는 이 암호를 저장하지 않사오니, 만약 잊어버리시게 되면, <underline>데이터를 복호화해드릴 수 없습니다</underline>",
"enterPasswordToEncrypt": "데이터 암호화를 위한 암호 입력",
"enterNewPasswordToEncrypt": "데이터 암호화를 위한 새로운 암호 입력",
"passwordChangedSuccessfully": "암호가 성공적으로 변경되었습니다",
"generatingEncryptionKeys": "암호화 키 생성 중...",
"continueLabel": "계속",
"insecureDevice": "보안이 허술한 기기",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "죄송합니다, 이 기기에서 보안 키를 생성할 수 없습니다.\n\n다른 기기에서 계정을 생성해주세요.",
"howItWorks": "작동 원리",
"ackPasswordLostWarning": "나는 암호를 분실한 경우, 데이터가 <underline>종단간 암호화</underline>되어있기에 데이터를 손실할 수 있음을 이해합니다.",
"loginTerms": "로그인을 누름으로써, 나는 <u-terms>사용자 약관</u-terms>과 <u-policy>개인정보 취급방침</u-policy>에 동의합니다.",
"logInLabel": "로그인",
"logout": "로그아웃",
"areYouSureYouWantToLogout": "로그아웃 하시겠습니까?",
"yesLogout": "네, 로그아웃하기",
"exit": "나가기",
"verifyingRecoveryKey": "복구 키 확인 중...",
"recoveryKeyVerified": "복구 키 확인 됨",
"recoveryKeySuccessBody": "좋습니다! 복구 키가 확인되었습니다. 확인 절차를 거쳐주셔서 감사합니다.\n\n잊지 마시고 꼭 복구 키를 안전하게 보관해주세요.",
"invalidRecoveryKey": "입력하신 복구 키가 유효하지 않습니다. 24 단어가 입력됐는지, 그리고 철자가 모두 정확한지 확인해주세요.\n\n구형 복구 코드를 입력하신 경우, 64 자가 맞는지, 그리고 문자가 각각 맞는지 확인해주세요.",
"recreatePasswordTitle": "암호 재생성",
"recreatePasswordBody": "현재 사용 중인 기기는 암호를 확인하기에 적합하지 않으나, 모든 기기에서 작동하는 방식으로 비밀번호를 재생성할 수 있습니다.\n\n복구 키를 사용하여 로그인하고 암호를 재생성해주세요. (원하시면 현재 사용 중인 암호와 같은 암호를 재사용하실 수 있습니다.)",
"invalidKey": "유효하지 않은 키",
"tryAgain": "다시 시도해주세요",
"viewRecoveryKey": "복구 키 보기",
"confirmRecoveryKey": "복구 키 확인",
"recoveryKeyVerifyReason": "암호를 잃어버리셨을 경우, 복구 키만이 당신의 사진들을 복원할 유일한 방법이 됩니다. 설정 > 계정으로 들어가셔서 복구 키를 확인하세요.\n\n여기에 복구 키를 입력하셔서, 확인하셨던 복구 키가 정상인지 체크해보세요.",
"confirmYourRecoveryKey": "복구 키 확인",
"confirm": "확인",
"emailYourLogs": "로그를 이메일로 보내기",
"pleaseSendTheLogsTo": "이 로그를 {toEmail}으로 보내주세요",
"copyEmailAddress": "이메일 주소 복사",
"exportLogs": "로그 내보내기",
"enterYourRecoveryKey": "복구 키를 입력하세요",
"tempErrorContactSupportIfPersists": "뭔가 잘못된 것 같습니다. 잠시 후에 다시 시도해주세요. 에러가 반복되는 경우, 저희 지원 팀에 문의해주세요.",
"networkHostLookUpErr": "Ente에 접속할 수 없습니다, 네트워크 설정을 확인해주시고 에러가 반복되는 경우 저희 지원 팀에 문의해주세요.",
"networkConnectionRefusedErr": "Ente에 접속할 수 없습니다, 잠시 후에 다시 시도해주세요. 에러가 반복되는 경우, 저희 지원 팀에 문의해주세요.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "뭔가 잘못된 것 같습니다. 잠시 후에 다시 시도해주세요. 에러가 반복되는 경우, 저희 지원 팀에 문의해주세요.",
"about": "소개",
"weAreOpenSource": "저희는 오픈 소스로 운영됩니다!",
"privacy": "개인 정보",
"terms": "약관",
"checkForUpdates": "업데이트 확인",
"checkStatus": "상태 확인",
"downloadUpdate": "다운로드",
"criticalUpdateAvailable": "중요 업데이트 있음",
"updateAvailable": "업데이트 가능",
"update": "업데이트",
"checking": "확인 중...",
"youAreOnTheLatestVersion": "최신 버전을 사용 중이십니다",
"warning": "경고",
"exportWarningDesc": "내보낸 파일은 민감한 정보들을 담고 있습니다. 안전하게 보관해주세요.",
"iUnderStand": "알겠습니다",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "코드를 내보내려면 인증절차를 거쳐주세요",
"importSuccessTitle": "얏호!",
"importSuccessDesc": "코드 {count} 개를 내보내셨습니다!",
"@importSuccessDesc": {
"placeholders": {
"count": {
"description": "The number of codes imported",
"type": "int",
"example": "1"
}
}
},
"sorry": "죄송합니다",
"importFailureDesc": "선택하신 파일을 분석할 수 없습니다.\n도움이 필요하시다면 support@ente.io로 문의해주세요.",
"pendingSyncs": "경고",
"pendingSyncsWarningBody": "코드 몇 개가 백업되어있지 않습니다.\n\n로그아웃하기 전 해당 코드들을 백업하셨는지 확인해주세요.",
"checkInboxAndSpamFolder": "검증을 위해 메일 보관함 (또는 스팸함) 을 확인해주세요",
"tapToEnterCode": "눌러서 코드 입력하기",
"resendEmail": "이메일 다시 보내기",
"weHaveSendEmailTo": "<green>{email}</green>으로 메일을 보냈습니다",
"@weHaveSendEmailTo": {
"description": "Text to indicate that we have sent a mail to the user",
"placeholders": {
"email": {
"description": "The email address of the user",
"type": "String",
"example": "example@ente.io"
}
}
},
"manualSort": "사용자 정의",
"editOrder": "순서 변경",
"mostFrequentlyUsed": "자주 사용됨",
"mostRecentlyUsed": "최근에 사용됨",
"activeSessions": "활성화된 세션",
"somethingWentWrongPleaseTryAgain": "뭔가 잘못됐습니다, 다시 시도해주세요",
"thisWillLogYouOutOfThisDevice": "이 작업을 하시면 기기에서 로그아웃하게 됩니다!",
"thisWillLogYouOutOfTheFollowingDevice": "이 작업을 하시면 다음 기기에서 로그아웃하게 됩니다:",
"terminateSession": "세션을 종결하시겠습니까?",
"terminate": "종결",
"thisDevice": "이 기기",
"toResetVerifyEmail": "암호를 재설정하시려면, 먼저 이메일을 인증해주세요.",
"thisEmailIsAlreadyInUse": "이 이메일은 이미 사용 중입니다",
"verificationFailedPleaseTryAgain": "검증 실패, 다시 시도해주세요",
"yourVerificationCodeHasExpired": "검증 코드의 유효시간이 경과하였습니다",
"incorrectCode": "잘못된 코드",
"sorryTheCodeYouveEnteredIsIncorrect": "죄송합니다, 입력하신 코드가 맞지 않습니다",
"emailChangedTo": "{newEmail}로 메일이 변경되었습니다",
"authenticationFailedPleaseTryAgain": "인증절차 실패, 다시 시도해주세요",
"authenticationSuccessful": "인증 성공!",
"twofactorAuthenticationSuccessfullyReset": "2FA가 성공적으로 초기화되었습니다",
"incorrectRecoveryKey": "잘못 된 복구 키",
"theRecoveryKeyYouEnteredIsIncorrect": "입력하신 복구 키가 맞지 않습니다",
"enterPassword": "암호 입력",
"selectExportFormat": "내보낼 포맷 선택",
"exportDialogDesc": "내보낸 파일은 선택하신 암호로 암호화됩니다.",
"encrypted": "암호화됨",
"plainText": "평문",
"passwordToEncryptExport": "암호화된 내보내기를 위한 암호",
"export": "내보내기",
"useOffline": "백업 없이 사용",
"signInToBackup": "코드를 백업하시려면 로그인해주세요",
"singIn": "로그인",
"sigInBackupReminder": "복구 가능한 방법을 남겨두기 위해 코드를 내보내세요.",
"offlineModeWarning": "백업 없이 진행하는 것을 선택하셨습니다. 코드의 안전성을 위해 별도의 백업 대책을 마련해주세요.",
"showLargeIcons": "큰 아이콘 보기",
"compactMode": "조밀하게 보기",
"shouldHideCode": "코드 숨기기",
"doubleTapToViewHiddenCode": "코드를 보시려면 해당 란을 더블탭해주세요",
"focusOnSearchBar": "앱 구동시 곧바로 검색하기",
"confirmUpdatingkey": "비밀 키를 업데이트하시겠어요?",
"minimizeAppOnCopy": "복사 후 어플을 최소화하기",
"editCodeAuthMessage": "코드 수정을 위해 인증절차를 거쳐주세요",
"deleteCodeAuthMessage": "코드 삭제를 위해 인증절차를 거쳐주세요",
"showQRAuthMessage": "QR 코드를 보기 위해 인증절차를 거쳐주세요",
"confirmAccountDeleteTitle": "계정 삭제 확인",
"confirmAccountDeleteMessage": "다른 Ente의 서비스를 이용하고 계시다면, 해당 계정은 모두 연결이 되어있습니다.\n\n모든 Ente 서비스에 업로드 된 당신의 데이터는 삭제 수순에 들어가며, 계정은 불가역적으로 삭제됩니다.",
"androidBiometricHint": "신원 확인",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "식별할 수 없습니다. 다시 시도해주세요.",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "성공",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "취소",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"androidSignInTitle": "인증 필요",
"@androidSignInTitle": {
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
},
"androidBiometricRequiredTitle": "생체인증 필요",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsRequiredTitle": "장치 자격 증명 필요",
"@androidDeviceCredentialsRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsSetupDescription": "장치 자격 증명 필요",
"@androidDeviceCredentialsSetupDescription": {
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
},
"goToSettings": "설정으로 가기",
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
"androidGoToSettingsDescription": "기기에 생체인증이 설정되어있지 않습니다. '설정 > 보안'으로 가셔서 생체인증을 설정해주세요.",
"@androidGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side."
},
"iOSLockOut": "생체인증에 문제가 있습니다. 활성화하시려면 기기를 잠궜다가 다시 풀어주세요.",
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
"iOSGoToSettingsDescription": "기기에 생체인증이 설정되어있지 않습니다. 핸드폰에서 Touch ID나 Face ID를 설정해주세요.",
"@iOSGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side."
},
"iOSOkButton": "확인",
"@iOSOkButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
},
"noInternetConnection": "인터넷 연결 없음",
"pleaseCheckYourInternetConnectionAndTryAgain": "인터넷 연결을 확인하시고 다시 시도해주세요.",
"signOutFromOtherDevices": "다른 기기들에서 로그아웃하기",
"signOutOtherBody": "다른 사람이 내 암호를 알 수도 있을 거란 의심이 드신다면, 당신의 계정을 사용 중인 다른 모든 기기에서 로그아웃할 수 있습니다.",
"signOutOtherDevices": "다른 기기들을 로그아웃시키기",
"doNotSignOut": "로그아웃 하지 않기",
"hearUsWhereTitle": "Ente에 대해 어떻게 알게 되셨나요? (선택사항)",
"hearUsExplanation": "저희는 어플 설치 과정을 관찰하지 않습니다. 어디에서 저희를 발견하셨는지 알려주신다면 도움이 될 겁니다!",
"recoveryKeySaved": "다운로드 폴더에 복구 키가 저장되었습니다!",
"waitingForBrowserRequest": "브라우저 요청 대기 중...",
"waitingForVerification": "검증 대기 중...",
"passkey": "패스키",
"passKeyPendingVerification": "검증 절차가 마무리되지 않았습니다",
"loginSessionExpired": "세션 만료됨",
"loginSessionExpiredDetails": "세션이 만료되었습니다. 다시 로그인해주세요.",
"developerSettingsWarning": "정말로 개발자 설정을 수정하시겠습니까?",
"developerSettings": "개발자 설정",
"serverEndpoint": "서버 엔드포인트",
"invalidEndpoint": "유효하지 않은 엔드포인트",
"invalidEndpointMessage": "죄송합니다, 입력하신 엔드포인트가 유효하지 않습니다. 유효한 엔드포인트를 입력하시고 다시 시도해주세요.",
"endpointUpdatedMessage": "엔드포인트가 성공적으로 업데이트됨",
"customEndpoint": "{endpoint}에 접속됨",
"pinText": "핀",
"unpinText": "핀 해제",
"pinnedCodeMessage": "{code}가 핀 되었습니다.",
"unpinnedCodeMessage": "{code}의 핀이 해제되었습니다.",
"pinned": "고정됨",
"tags": "태그",
"createNewTag": "새 태그 만들기",
"tag": "태그",
"create": "만들기",
"editTag": "태그 수정하기",
"deleteTagTitle": "태그를 지우시겠습니까?",
"deleteTagMessage": "태그를 지우시겠습니까? 되돌리실 수 없습니다.",
"somethingWentWrongParsingCode": "{x} 코드를 분석할 수 없습니다.",
"updateNotAvailable": "업데이트 없음",
"viewRawCodes": "원시 코드 보기",
"rawCodes": "원시 코드",
"rawCodeData": "원시 코드 데이터",
"appLock": "어플 잠금",
"noSystemLockFound": "시스템 잠금 찾을 수 없음",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "어플 잠금을 활성화하시려면, 기기의 암호를 만들거나 시스템 설정에서 화면 잠금을 설정해주세요.",
"autoLock": "자동 잠금",
"immediately": "즉시",
"reEnterPassword": "암호 재입력",
"reEnterPin": "핀 재입력",
"next": "다음",
"tooManyIncorrectAttempts": "잘못된 시도 횟수가 너무 많습니다",
"tapToUnlock": "잠금을 해제하려면 누르세요",
"setNewPassword": "새 비밀번호 설정",
"deviceLock": "기기 잠금",
"hideContent": "내용 숨기기",
"hideContentDescriptionAndroid": "어플 전환 화면에서 어플의 내용을 숨기고 스크린샷 촬영을 막습니다",
"hideContentDescriptioniOS": "어플 전환 화면에서 어플의 내용을 숨깁니다",
"autoLockFeatureDescription": "어플이 백그라운드로 넘어가고 잠금 처리되기까지의 시간",
"appLockDescription": "기본 잠금 화면이나, PIN 번호나 암호를 사용한 사용자 설정 잠금 화면 중에 선택하세요.",
"pinLock": "PIN 잠금",
"enterPin": "PIN 번호 입력",
"setNewPin": "새 PIN 번호 설정",
"importFailureDescNew": "선택하신 파일을 분석할 수 없습니다.",
"appLockNotEnabled": "어플 잠금 설정되지 않음",
"appLockNotEnabledDescription": "설정 > 어플 잠금에서 어플 잠금을 활성화해주세요",
"authToViewPasskey": "패스키를 보려면 인증절차를 거쳐주세요",
"appLockOfflineModeWarning": "백업 없이 진행하는 것을 선택하셨습니다. 어플 잠금 방법을 잊어버리신 경우, 데이터에 접근하실 수 없게 됩니다."
}

View File

@@ -6,7 +6,7 @@
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Saugiai kurkite atsargines 2FA kodų kopijas",
"onBoardingBody": "Saugiai kurkite savo atsargines 2FA kodų kopijas",
"onBoardingGetStarted": "Pradėti",
"setupFirstAccount": "Nustatykite savo pirmąją paskyrą",
"importScanQrCode": "Skenuoti QR kodą",
@@ -154,8 +154,9 @@
"enterCodeHint": "Įveskite 6 skaitmenų kodą\niš autentifikatoriaus programos",
"lostDeviceTitle": "Prarastas įrenginys?",
"twoFactorAuthTitle": "Dvigubas tapatybės nustatymas",
"passkeyAuthTitle": "Slaptarakto patvirtinimas",
"verifyPasskey": "Patvirtinti slaptaraktą",
"passkeyAuthTitle": "Slaptarakčio patvirtinimas",
"verifyPasskey": "Patvirtinti slaptaraktį",
"loginWithTOTP": "Prisijungti su TOTP",
"recoverAccount": "Atkurti paskyrą",
"enterRecoveryKeyHint": "Įveskite atkūrimo raktą",
"recover": "Atkurti",
@@ -257,6 +258,10 @@
"areYouSureYouWantToLogout": "Ar tikrai norite atsijungti?",
"yesLogout": "Taip, atsijungti",
"exit": "Išeiti",
"theme": "Tema",
"lightTheme": "Šviesi",
"darkTheme": "Tamsi",
"systemTheme": "Sistemos",
"verifyingRecoveryKey": "Patvirtinima atkūrimo raktą...",
"recoveryKeyVerified": "Patvirtintas atkūrimo raktas",
"recoveryKeySuccessBody": "Puiku! Jūsų atkūrimo raktas tinkamas. Dėkojame už patvirtinimą.\n\nNepamirškite sukurti saugią atkūrimo rakto atsarginę kopiją.",
@@ -299,7 +304,7 @@
},
"authToExportCodes": "Nustatykite tapatybę, kad eksportuotumėte savo kodus",
"importSuccessTitle": "Valio!",
"importSuccessDesc": "Importavote {count} kodų.",
"importSuccessDesc": "Importavote {count} kodus (-ų).",
"@importSuccessDesc": {
"placeholders": {
"count": {
@@ -313,10 +318,10 @@
"importFailureDesc": "Nepavyko išanalizuoti pasirinkto failo.\nJei reikia pagalbos, rašykite adresu support@ente.io.",
"pendingSyncs": "Įspėjimas",
"pendingSyncsWarningBody": "Kai kurių jūsų kodų atsarginės kopijos nebuvo sukurtos.\n\nPrieš atsijungdami įsitikinkite, kad turite atsarginę šių kodų kopiją.",
"checkInboxAndSpamFolder": "Patikrinkite savo gautieją (ir šlamštą), kad užbaigtumėte patvirtinimą",
"checkInboxAndSpamFolder": "Patikrinkite savo gautieją (ir šlamštą), kad užbaigtumėte patvirtinimą.",
"tapToEnterCode": "Palieskite, kad įvestumėte kodą",
"resendEmail": "Iš naujo siųsti el. laišką",
"weHaveSendEmailTo": "Išsiuntėme laišką adresu <green>{email}</green>",
"weHaveSendEmailTo": "Išsiuntėme laišką adresu <green>{email}</green>.",
"@weHaveSendEmailTo": {
"description": "Text to indicate that we have sent a mail to the user",
"placeholders": {
@@ -327,6 +332,10 @@
}
}
},
"manualSort": "Pasirinktinis",
"editOrder": "Redaguoti tvarką",
"mostFrequentlyUsed": "Dažniausiai naudojamą",
"mostRecentlyUsed": "Neseniai naudotą",
"activeSessions": "Aktyvūs seansai",
"somethingWentWrongPleaseTryAgain": "Kažkas nutiko ne taip. Bandykite dar kartą.",
"thisWillLogYouOutOfThisDevice": "Tai jus atjungs nuo šio įrenginio.",
@@ -337,12 +346,12 @@
"toResetVerifyEmail": "Kad iš naujo nustatytumėte slaptažodį, pirmiausia patvirtinkite savo el. paštą.",
"thisEmailIsAlreadyInUse": "Šis el. paštas jau naudojamas.",
"verificationFailedPleaseTryAgain": "Patvirtinimas nepavyko. Bandykite dar kartą.",
"yourVerificationCodeHasExpired": "Jūsų patvirtinimo kodo laikas nebegaliojantis.",
"yourVerificationCodeHasExpired": "Jūsų patvirtinimo kodas nebegaliojantis.",
"incorrectCode": "Neteisingas kodas",
"sorryTheCodeYouveEnteredIsIncorrect": "Atsiprašome, įvestas kodas yra neteisingas.",
"emailChangedTo": "El. paštas pakeistas į {newEmail}",
"authenticationFailedPleaseTryAgain": "Tapatybės nustatymas nepavyko. Bandykite dar kartą.",
"authenticationSuccessful": "Tapatybės nustatymas sėkmingas!",
"authenticationSuccessful": "Tapatybės nustatymas sėkmingas.",
"twofactorAuthenticationSuccessfullyReset": "Dvigubas tapatybės nustatymas sėkmingai iš naujo nustatytas.",
"incorrectRecoveryKey": "Neteisingas atkūrimo raktas",
"theRecoveryKeyYouEnteredIsIncorrect": "Įvestas atkūrimo raktas yra neteisingas.",
@@ -433,7 +442,7 @@
"recoveryKeySaved": "Atkūrimo raktas išsaugotas atsisiuntimų aplanke.",
"waitingForBrowserRequest": "Laukiama naršyklės užklausos...",
"waitingForVerification": "Laukiama patvirtinimo...",
"passkey": "Slaptaraktas",
"passkey": "Slaptaraktis",
"passKeyPendingVerification": "Vis dar laukiama patvirtinimo",
"loginSessionExpired": "Seansas baigėsi",
"loginSessionExpiredDetails": "Jūsų seansas baigėsi. Prisijunkite iš naujo.",
@@ -448,6 +457,7 @@
"unpinText": "Atsegti",
"pinnedCodeMessage": "{code} buvo prisegtas",
"unpinnedCodeMessage": "{code} buvo atsegtas",
"pinned": "Prisegta",
"tags": "Žymės",
"createNewTag": "Kurti naują žymę",
"tag": "Žymė",
@@ -473,9 +483,9 @@
"setNewPassword": "Nustatykite naują slaptažodį",
"deviceLock": "Įrenginio užraktas",
"hideContent": "Slėpti turinį",
"hideContentDescriptionAndroid": "Paslepia programų turinį programų perjungiklyje ir išjungia ekrano kopijas",
"hideContentDescriptioniOS": "Paslepia programos turinį programos perjungiklyje",
"autoLockFeatureDescription": "Laikas, po kurio programa užrakinama perkėlus ją į foną",
"hideContentDescriptionAndroid": "Paslepia programų turinį programų perjungiklyje ir išjungia ekrano kopijas.",
"hideContentDescriptioniOS": "Paslepia programos turinį programos perjungiklyje.",
"autoLockFeatureDescription": "Laikas, po kurio programa užrakinama perkėlus ją į foną.",
"appLockDescription": "Pasirinkite tarp numatytojo įrenginio užrakinimo ekrano ir pasirinktinio užrakinimo ekrano su PIN kodu arba slaptažodžiu.",
"pinLock": "PIN užraktas",
"enterPin": "Įveskite PIN",
@@ -483,6 +493,14 @@
"importFailureDescNew": "Nepavyko išanalizuoti pasirinkto failo.",
"appLockNotEnabled": "Programos užraktas neįjungtas",
"appLockNotEnabledDescription": "Įjunkite programos užraktą iš Saugumas > Programos užraktas",
"authToViewPasskey": "Nustatykite tapatybę, kad peržiūrėtumėte slaptaraktą",
"appLockOfflineModeWarning": "Pasirinkote tęsti be atsarginių kopijų. Jei pamiršite programos užraktą, jums bus užrakinta prieiga prie duomenų."
"authToViewPasskey": "Nustatykite tapatybę, kad peržiūrėtumėte slaptaraktį",
"appLockOfflineModeWarning": "Pasirinkote tęsti be atsarginių kopijų. Jei pamiršite programos užraktą, jums bus užrakinta prieiga prie duomenų.",
"duplicateCodes": "Dubliuoti kodus",
"noDuplicates": "✨ Dublikatų nėra",
"youveNoDuplicateCodesThatCanBeCleared": "Neturite dubliuotų kodų, kuriuos būtų galima išvalyti.",
"deduplicateCodes": "Atdubliuoti kodus",
"deselectAll": "Naikinti visų pasirinkimą",
"selectAll": "Pasirinkti viską",
"deleteDuplicates": "Ištrinti dublikatus",
"plainHTML": "Grynasis HTML"
}

View File

@@ -0,0 +1 @@
{}

View File

@@ -156,6 +156,7 @@
"twoFactorAuthTitle": "Tweestapsverificatie",
"passkeyAuthTitle": "Passkey verificatie",
"verifyPasskey": "Bevestig passkey",
"loginWithTOTP": "Inloggen met TOTP",
"recoverAccount": "Account herstellen",
"enterRecoveryKeyHint": "Voer je herstelsleutel in",
"recover": "Herstellen",
@@ -257,6 +258,10 @@
"areYouSureYouWantToLogout": "Weet je zeker dat je wilt uitloggen?",
"yesLogout": "Ja, uitloggen",
"exit": "Afsluiten",
"theme": "Thema",
"lightTheme": "Licht",
"darkTheme": "Donker",
"systemTheme": "Systeem",
"verifyingRecoveryKey": "Herstelsleutel verifiëren...",
"recoveryKeyVerified": "Herstelsleutel geverifieerd",
"recoveryKeySuccessBody": "Super! Je herstelsleutel is geldig. Bedankt voor het verifiëren.\n\nVergeet niet om je herstelsleutel veilig te bewaren.",
@@ -327,6 +332,10 @@
}
}
},
"manualSort": "Aangepast",
"editOrder": "Volgorde wijzigen",
"mostFrequentlyUsed": "Vaak gebruikt",
"mostRecentlyUsed": "Recent gebruikt",
"activeSessions": "Actieve sessies",
"somethingWentWrongPleaseTryAgain": "Er is iets fout gegaan, probeer het opnieuw",
"thisWillLogYouOutOfThisDevice": "Dit zal je uitloggen van dit apparaat!",
@@ -448,6 +457,7 @@
"unpinText": "Losmaken",
"pinnedCodeMessage": "{code} is vastgezet",
"unpinnedCodeMessage": "{code} is losgemaakt",
"pinned": "Vastgezet",
"tags": "Labels",
"createNewTag": "Nieuw label maken",
"tag": "Label",
@@ -484,5 +494,12 @@
"appLockNotEnabled": "App-vergrendeling niet ingeschakeld",
"appLockNotEnabledDescription": "Schakel app vergrendeling in vanuit Beveiliging > App vergrendeling",
"authToViewPasskey": "Verifieer uzelf om uw passkey te bekijken",
"appLockOfflineModeWarning": "Je hebt ervoor gekozen om verder te gaan zonder backups. Als je jouw applock vergeet, wordt je uitgesloten van toegang tot je gegevens."
"appLockOfflineModeWarning": "Je hebt ervoor gekozen om verder te gaan zonder backups. Als je jouw applock vergeet, wordt je uitgesloten van toegang tot je gegevens.",
"duplicateCodes": "Dubbele codes",
"noDuplicates": "✨ Geen dubbele",
"youveNoDuplicateCodesThatCanBeCleared": "Je hebt geen dubbele codes die kunnen worden gewist",
"deduplicateCodes": "Dubbele codes",
"deselectAll": "Alles deselecteren",
"selectAll": "Alles selecteren",
"deleteDuplicates": "Dubbelen verwijderen"
}

View File

@@ -156,6 +156,7 @@
"twoFactorAuthTitle": "Uwierzytelnianie dwustopniowe",
"passkeyAuthTitle": "Weryfikacja kluczem dostępu",
"verifyPasskey": "Zweryfikuj klucz dostępu",
"loginWithTOTP": "Zaloguj się za pomocą TOTP",
"recoverAccount": "Odzyskaj konto",
"enterRecoveryKeyHint": "Wprowadź swój klucz odzyskiwania",
"recover": "Odzyskaj",
@@ -257,6 +258,10 @@
"areYouSureYouWantToLogout": "Czy na pewno chcesz się wylogować?",
"yesLogout": "Tak, wyloguj",
"exit": "Wyjdź",
"theme": "Motyw",
"lightTheme": "Jasny",
"darkTheme": "Ciemny",
"systemTheme": "Systemowy",
"verifyingRecoveryKey": "Weryfikowanie klucza odzyskiwania...",
"recoveryKeyVerified": "Klucz odzyskiwania zweryfikowany",
"recoveryKeySuccessBody": "Znakomicie! Klucz odzyskiwania jest prawidłowy. Dziękujemy za weryfikację.\n\nPamiętaj, aby bezpiecznie przechowywać kopię zapasową klucza odzyskiwania.",
@@ -327,6 +332,10 @@
}
}
},
"manualSort": "Niestandardowe",
"editOrder": "Zmień kolejność",
"mostFrequentlyUsed": "Często używane",
"mostRecentlyUsed": "Ostatnio używane",
"activeSessions": "Aktywne sesje",
"somethingWentWrongPleaseTryAgain": "Coś poszło nie tak, spróbuj ponownie",
"thisWillLogYouOutOfThisDevice": "To wyloguje Cię z tego urządzenia!",
@@ -448,6 +457,7 @@
"unpinText": "Odepnij",
"pinnedCodeMessage": "Przypięto {code}",
"unpinnedCodeMessage": "Odpięto {code}",
"pinned": "Przypięte",
"tags": "Etykiety",
"createNewTag": "Utwórz nową etykietę",
"tag": "Etykieta",
@@ -484,5 +494,13 @@
"appLockNotEnabled": "Blokada aplikacji nie jest włączona",
"appLockNotEnabledDescription": "Prosimy włączyć blokadę aplikacji z Zabezpieczenia > Blokada aplikacji",
"authToViewPasskey": "Prosimy uwierzytelnić się, aby wyświetlić klucz dostępu",
"appLockOfflineModeWarning": "Wybrano kontynuowanie bez kopii zapasowych. Jeśli zapomnisz blokady aplikacji, utracisz dostęp do swoich danych."
"appLockOfflineModeWarning": "Wybrano kontynuowanie bez kopii zapasowych. Jeśli zapomnisz blokady aplikacji, utracisz dostęp do swoich danych.",
"duplicateCodes": "Duplikuj kody",
"noDuplicates": "✨ Brak duplikatów",
"youveNoDuplicateCodesThatCanBeCleared": "Nie masz duplikatów kodów, które mogą być wyczyszczone",
"deduplicateCodes": "Deduplikuj kody",
"deselectAll": "Odznacz wszystko",
"selectAll": "Zaznacz wszystko",
"deleteDuplicates": "Usuń duplikaty",
"plainHTML": "Zwykły HTML"
}

View File

@@ -132,7 +132,7 @@
"general": "Geral",
"settings": "Ajustes",
"copied": "Copiado",
"pleaseTryAgain": "Tente de novo",
"pleaseTryAgain": "Tente novamente",
"existingUser": "Usuário existente",
"newUser": "Novo no Ente",
"delete": "Excluir",
@@ -142,7 +142,7 @@
"suggestFeatures": "Sugerir recursos",
"faq": "Perguntas frequentes",
"somethingWentWrongMessage": "Algo deu errado. Tente outra vez",
"leaveFamily": "Sair da família",
"leaveFamily": "Sair do plano familiar",
"leaveFamilyMessage": "Deseja mesmo sair do plano familiar?",
"inFamilyPlanMessage": "Você está em um plano familiar!",
"hintForMobile": "Pressione em um código para editar ou excluir.",
@@ -156,6 +156,7 @@
"twoFactorAuthTitle": "Autenticação de dois fatores",
"passkeyAuthTitle": "Verificação de chave de acesso",
"verifyPasskey": "Verificar chave de acesso",
"loginWithTOTP": "Registrar com TOTP",
"recoverAccount": "Recuperar conta",
"enterRecoveryKeyHint": "Digite a chave de recuperação",
"recover": "Recuperar",
@@ -173,7 +174,7 @@
"invalidEmailTitle": "Endereço de e-mail inválido",
"invalidEmailMessage": "Insira um endereço de e-mail válido.",
"deleteAccount": "Excluir conta",
"deleteAccountQuery": "Estamos tristes com sua decisão. Você encontrou algum problema?",
"deleteAccountQuery": "Estamos tristes por vê-lo sair. Você enfrentou algum problema?",
"yesSendFeedbackAction": "Sim, enviar feedback",
"noDeleteAccountAction": "Não, excluir conta",
"initiateAccountDeleteTitle": "Autentique para iniciar a exclusão de conta",
@@ -257,6 +258,10 @@
"areYouSureYouWantToLogout": "Deseja mesmo sair?",
"yesLogout": "Sim, quero sair",
"exit": "Sair",
"theme": "Tema",
"lightTheme": "Claro",
"darkTheme": "Escuro",
"systemTheme": "Sistema",
"verifyingRecoveryKey": "Verificando chave de recuperação...",
"recoveryKeyVerified": "Chave de recuperação verificada",
"recoveryKeySuccessBody": "Ótimo! Sua chave de recuperação é válida. Obrigada por verificar.\n\nLembre-se de manter sua chave de recuperação copiada com segurança.",
@@ -270,7 +275,7 @@
"recoveryKeyVerifyReason": "Sua chave de recuperação é a única maneira de recuperar suas fotos se você esqueceu sua senha. Você pode encontrar sua chave de recuperação em Opções > Conta.\n\nInsira sua chave de recuperação aqui para verificar se você a salvou corretamente.",
"confirmYourRecoveryKey": "Confirme sua chave de recuperação",
"confirm": "Confirmar",
"emailYourLogs": "Enviar logs por e-mail",
"emailYourLogs": "Enviar registros por e-mail",
"pleaseSendTheLogsTo": "Envie os logs para \n{toEmail}",
"copyEmailAddress": "Copiar endereço de e-mail",
"exportLogs": "Exportar logs",
@@ -327,6 +332,10 @@
}
}
},
"manualSort": "Personalizado",
"editOrder": "Editar ordem",
"mostFrequentlyUsed": "Usado com frequência",
"mostRecentlyUsed": "Usado recentemente",
"activeSessions": "Sessões ativas",
"somethingWentWrongPleaseTryAgain": "Algo deu errado. Tente outra vez",
"thisWillLogYouOutOfThisDevice": "Isso fará com que você saia deste dispositivo!",
@@ -336,7 +345,7 @@
"thisDevice": "Esse dispositivo",
"toResetVerifyEmail": "Para redefinir sua senha, verifique seu e-mail primeiramente.",
"thisEmailIsAlreadyInUse": "Este e-mail já está em uso",
"verificationFailedPleaseTryAgain": "Falha na verificação. Tente novamente",
"verificationFailedPleaseTryAgain": "Falhou na verificação. Tente novamente",
"yourVerificationCodeHasExpired": "Seu código de verificação expirou",
"incorrectCode": "Código incorreto",
"sorryTheCodeYouveEnteredIsIncorrect": "O código inserido está incorreto",
@@ -353,7 +362,7 @@
"plainText": "Texto simples",
"passwordToEncryptExport": "Senha para criptografar a exportação",
"export": "Exportar",
"useOffline": "Usar sem backups",
"useOffline": "Usar sem cópia de segurança",
"signInToBackup": "Entre para fazer backup de seus códigos",
"singIn": "Entrar",
"sigInBackupReminder": "Exporte seus códigos para garantir que você tenha uma cópia para restaurar.",
@@ -448,6 +457,7 @@
"unpinText": "Desafixar",
"pinnedCodeMessage": "{code} foi fixado",
"unpinnedCodeMessage": "{code} foi desafixado",
"pinned": "Fixado",
"tags": "Etiquetas",
"createNewTag": "Criar nova etiqueta",
"tag": "Etiqueta",
@@ -484,5 +494,13 @@
"appLockNotEnabled": "Bloqueio de aplicativo não ativado",
"appLockNotEnabledDescription": "Ative o bloqueio de aplicativo em Segurança > Bloqueio de aplicativo",
"authToViewPasskey": "Autentique para ver a sua chave de acesso",
"appLockOfflineModeWarning": "Você prosseguiu sem cópias de segurança. Caso, se esqueça de seu aplicativo de bloqueio, você não poderá mais acessar seus dados."
"appLockOfflineModeWarning": "Você prosseguiu sem cópias de segurança. Caso, se esqueça de seu aplicativo de bloqueio, você não poderá mais acessar seus dados.",
"duplicateCodes": "Duplicar códigos",
"noDuplicates": "✨ Sem duplicados",
"youveNoDuplicateCodesThatCanBeCleared": "Você não possui códigos duplicados para limpar",
"deduplicateCodes": "Desduplicar códigos",
"deselectAll": "Deselecionar tudo",
"selectAll": "Selecionar tudo",
"deleteDuplicates": "Excluir duplicados",
"plainHTML": "HTML simples"
}

View File

@@ -446,8 +446,6 @@
"customEndpoint": "Подключено к {endpoint}",
"pinText": "Прикрепить",
"unpinText": "Открепить",
"pinnedCodeMessage": "{code} прикреплен",
"unpinnedCodeMessage": "{code} откреплен",
"tags": "Метки",
"createNewTag": "Создать новую метку",
"tag": "Метка",

View File

@@ -19,6 +19,20 @@
"pleaseVerifyDetails": "Prosím, skontrolujte svoje údaje a skúste to znova",
"codeIssuerHint": "Vydavateľ",
"codeSecretKeyHint": "Tajný kľúč",
"secret": "Tajný kľúč",
"all": "Všetko",
"notes": "Poznámky",
"notesLengthLimit": "Maximálna dĺžka poznámky je {count} znakov",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
"count": {
"description": "The maximum number of characters allowed for notes",
"type": "int",
"example": "100"
}
}
},
"codeAccountHint": "Účet (ty@domena.sk)",
"codeTagHint": "Tag",
"accountKeyType": "Typ kľúča",
@@ -31,9 +45,12 @@
"timeBasedKeyType": "Na základe času (TOTP)",
"counterBasedKeyType": "Na základe počítadla (HOTP)",
"saveAction": "Uložiť",
"nextTotpTitle": "ďalej",
"nextTotpTitle": "ďalší",
"deleteCodeTitle": "Odstrániť položku?",
"deleteCodeMessage": "Naozaj chcete odstrániť položku? Táto akcia je nezvratná.",
"trashCode": "Odstrániť kód?",
"trashCodeMessage": "Ste si istý, že chcete odstrániť kód pre účet {account}?",
"trash": "Odstrániť",
"viewLogsAction": "Zobraziť logy",
"sendLogsDescription": "Toto odošle logy, ktoré nám pomôžu vyriešiť váš problém. Aj keď prijímame preventívne opatrenia, aby sme zabezpečili, že sa citlivé informácie neukladajú do logov, odporúčame vám, aby ste si ich pred zdieľaním pozreli.",
"preparingLogsTitle": "Príprava logov...",
@@ -100,6 +117,7 @@
"emailVerificationToggle": "Overenie pomocou e-mailovej adresy",
"emailVerificationEnableWarning": "Aby ste predišli vymknutiu sa z vášho účtu, nezabudnite pred povolením overenia emailom uložiť kópiu svojho 2FA emailu mimo Ente Auth.",
"authToChangeEmailVerificationSetting": "Pre zmenu overenia pomocou emailu sa musíte overiť",
"authenticateGeneric": "Prosím, overte svoju identitu",
"authToViewYourRecoveryKey": "Pre zobrazenie vášho kľúča na obnovenie sa musíte overiť",
"authToChangeYourEmail": "Pre zmenu vášho emailu sa musíte overiť",
"authToChangeYourPassword": "Pre zmenu vášho hesla sa musíte overiť",
@@ -127,6 +145,8 @@
"leaveFamily": "Opustiť rodinku",
"leaveFamilyMessage": "Ste si istý, že chcete opustiť rodinku?",
"inFamilyPlanMessage": "Ste prihlásený k rodinke!",
"hintForMobile": "Pre úpravu alebo odstránenie kódu podržte.",
"hintForDesktop": "Pre úpravu alebo odstránenie kódu kliknite pravým tlačidlom myši.",
"scan": "Skenovať",
"scanACode": "Skenovať kód",
"verify": "Overiť",
@@ -136,6 +156,7 @@
"twoFactorAuthTitle": "Dvojfaktorové overovanie",
"passkeyAuthTitle": "Overenie pomocou passkey",
"verifyPasskey": "Overiť passkey",
"loginWithTOTP": "Prihlásenie pomocou TOTP",
"recoverAccount": "Obnoviť účet",
"enterRecoveryKeyHint": "Vložte váš kód pre obnovenie",
"recover": "Obnoviť",
@@ -171,6 +192,7 @@
"security": "Zabezpečenie",
"lockscreen": "Uzamknutie obrazovky",
"authToChangeLockscreenSetting": "Pre zmenu nastavenia uzamknutia obrazovky sa musíte overiť",
"deviceLockEnablePreSteps": "Pre povolenie zámku zariadenia, nastavte prístupový kód zariadenia alebo zámok obrazovky v nastaveniach systému.",
"viewActiveSessions": "Zobraziť aktívne relácie",
"authToViewYourActiveSessions": "Pre zobrazenie vašich aktívnych relácii sa musíte overiť",
"searchHint": "Hľadať...",
@@ -181,6 +203,10 @@
"scanAQrCode": "Naskenovať QR kód",
"enterDetailsManually": "Zadajte údaje manuálne",
"edit": "Upraviť",
"share": "Zdielať",
"shareCodes": "Zdieľať kódy",
"shareCodesDuration": "Zvoľte dobu, počas ktorej chcete zdieľať kódy.",
"restore": "Obnoviť",
"copiedToClipboard": "Skopírované do schránky",
"copiedNextToClipboard": "Skopírovaný následujúci kód do schránky",
"error": "Chyba",
@@ -334,6 +360,7 @@
"sigInBackupReminder": "Exportujte svoje kódy, aby ste sa uistili, že máte zálohu, ktorú môžete neskôr obnoviť.",
"offlineModeWarning": "Rozhodli ste sa pokračovať bez zálohovania. Prosím, vykonávajte pravidelné manuálne zálohy aby ste mali istotu, že kódy nestratíte.",
"showLargeIcons": "Zobraziť veľké ikony",
"compactMode": "Kompaktný mód",
"shouldHideCode": "Skryť kódy",
"doubleTapToViewHiddenCode": "Dvakrát klepnite na položku aby ste zobrazili kód",
"focusOnSearchBar": "Využívať pole vyhľadávania pri spustení aplikácie",
@@ -420,8 +447,6 @@
"customEndpoint": "Pripojený k endpointu {endpoint}",
"pinText": "Pripnúť",
"unpinText": "Odopnúť",
"pinnedCodeMessage": "{code} bol pripnutý",
"unpinnedCodeMessage": "{code} bol odopnutý",
"tags": "Tagy",
"createNewTag": "Vytvoriť nový tag",
"tag": "Tag",
@@ -454,5 +479,9 @@
"pinLock": "Zámok PIN",
"enterPin": "Zadajte PIN",
"setNewPin": "Nastaviť nový PIN",
"importFailureDescNew": "Vybraný súbor nie je možné spracovať."
"importFailureDescNew": "Vybraný súbor nie je možné spracovať.",
"appLockNotEnabled": "Zámok aplikácie nie je povolený",
"appLockNotEnabledDescription": "Prosím, povoľte zámok aplikácie v časti Zabezpečenie > Zámok aplikácie",
"authToViewPasskey": "Pre zobrazenie vášho passkey sa musíte overiť",
"appLockOfflineModeWarning": "Rozhodli ste sa pokračovať bez záloh. Ak zabudnete svoj zámok aplikácie, prístup k údajom bude nemožný."
}

View File

@@ -327,6 +327,8 @@
}
}
},
"mostFrequentlyUsed": "Pogosto uporabljeni",
"mostRecentlyUsed": "Nedavno uporabljeno",
"activeSessions": "Aktivne seje",
"somethingWentWrongPleaseTryAgain": "Nekaj je šlo narobe, prosimo poizkusite znova.",
"thisWillLogYouOutOfThisDevice": "To vas bo odjavilo iz te naprave!",
@@ -446,8 +448,7 @@
"customEndpoint": "Povezano na {endpoint}",
"pinText": "Pripni",
"unpinText": "Odpni",
"pinnedCodeMessage": "{code} je bila pripeta",
"unpinnedCodeMessage": "{code} je bila odpeta",
"pinned": "Pripeto",
"tags": "Oznake",
"createNewTag": "Ustvari novo oznako",
"tag": "Oznaka",

View File

@@ -2,6 +2,10 @@
"account": "Konto",
"unlock": "Lås upp",
"recoveryKey": "Återställningsnyckel",
"counterAppBarTitle": "Räknare",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Säkerhetskopiera dina 2FA-koder",
"onBoardingGetStarted": "Kom igång",
"setupFirstAccount": "Konfigurera ditt första konto",
@@ -15,22 +19,41 @@
"pleaseVerifyDetails": "Kontrollera dina detaljer och försök igen",
"codeIssuerHint": "Utfärdare",
"codeSecretKeyHint": "Secret Key",
"secret": "Säkerhets nyckel",
"all": "Alla",
"notes": "Anteckningar",
"notesLengthLimit": "Anteckningar kan vara högst {count} tecken långa",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
"count": {
"description": "The maximum number of characters allowed for notes",
"type": "int",
"example": "100"
}
}
},
"codeAccountHint": "Konto (du@domän.com)",
"codeTagHint": "Tagg",
"accountKeyType": "Typ av nyckel",
"sessionExpired": "Sessionen har gått ut",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Logga in igen",
"loggingOut": "Loggar ut...",
"timeBasedKeyType": "Tidsbaserad (TOTP)",
"counterBasedKeyType": "Räknarbaserad (HOTP)",
"saveAction": "Spara",
"nextTotpTitle": "nästa",
"deleteCodeTitle": "Radera kod?",
"deleteCodeMessage": "Vill du ta bort den här koden? Det går inte att ångra den här åtgärden.",
"trashCode": "Ta bort kod?",
"trashCodeMessage": "Är du säker på att du vill ta bort koden för {account}?",
"trash": "Papperskorg",
"viewLogsAction": "Visa loggar",
"sendLogsDescription": "Detta kommer att skicka över loggar för att hjälpa oss felsöka ditt problem. Även om vi vidtar försiktighetsåtgärder för att säkerställa att känslig information inte loggas, uppmuntrar vi dig att se dessa loggar innan du delar dem.",
"preparingLogsTitle": "Förbereder loggar...",
"emailLogsTitle": "E-posta loggar",
"emailLogsMessage": "Skicka loggarna till {email}",
"@emailLogsMessage": {
@@ -61,55 +84,111 @@
"pleaseWait": "Vänligen vänta...",
"generatingEncryptionKeysTitle": "Skapar krypteringsnycklar...",
"recreatePassword": "Återskapa lösenord",
"recreatePasswordMessage": "Denna enhet är inte tillräckligt kraftfull för att verifiera ditt lösenord, men vi kan återskapa det på ett sätt som fungerar med alla enheter.\n\nLogga in med din återställningsnyckel och återskapa ditt lösenord (du kan använda samma igen om du vill).",
"useRecoveryKey": "Använd återställningsnyckel",
"incorrectPasswordTitle": "Felaktigt lösenord",
"welcomeBack": "Välkommen tillbaka!",
"madeWithLoveAtPrefix": "gjord med ❤️ av ",
"supportDevs": "Prenumerera på <bold-green>ente</bold-green> för att stödja oss",
"supportDiscount": "Använd kupongkoden \"AUTH\" för att få 10% rabatt första året",
"changeEmail": "Ändra e-postadress",
"changePassword": "Ändra lösenord",
"data": "Data",
"importCodes": "Importera koder",
"importTypePlainText": "Enkel text",
"importTypeEnteEncrypted": "Ente krypterad export",
"passwordForDecryptingExport": "Lösenord för att dekryptera export",
"passwordEmptyError": "Lösenordet får inte vara tomt",
"importFromApp": "Importera koder från {appName}",
"importGoogleAuthGuide": "Exportera dina konton från Google Authenticator till en QR-kod med alternativet \"Överföra konton\". Använd sedan en annan enhet och skanna QR-koden.\n\nTips: Du kan använda din bärbara dators webbkamera för att ta en bild av QR-koden.",
"importSelectJsonFile": "Välj JSON-fil",
"importSelectAppExport": "Välj {appName} exportfil",
"importEnteEncGuide": "Välj den krypterade JSON-filen som exporteras från Ente",
"importRaivoGuide": "Använd alternativet \"Exportera OTPs till zip-arkiv\" i Raivos inställningar.\n\nExtrahera zip-filen och importera JSON-filen.",
"importBitwardenGuide": "Använd alternativet \"Exportera valv\" inom Bitwarden Tools och importera den okrypterade JSON-filen.",
"exportCodes": "Exportera koder",
"importLabel": "Importera",
"importInstruction": "Vänligen välj en fil som innehåller en lista över dina koder i följande format",
"importCodeDelimiterInfo": "Koderna kan separeras med kommatecken eller en ny rad",
"selectFile": "Välj fil",
"emailVerificationToggle": "E-postverifiering",
"emailVerificationEnableWarning": "För att undvika att bli låst från ditt konto, se till att spara en kopia av din e-post 2FA utanför Ente Auth innan du aktiverar e-postverifiering.",
"authToChangeEmailVerificationSetting": "Autentisera för att ändra din e-postadress",
"authenticateGeneric": "Var god autentisera",
"authToViewYourRecoveryKey": "Autentisera för att visa din återställningsnyckel",
"authToChangeYourEmail": "Autentisera för att ändra din e-postadress",
"authToChangeYourPassword": "Autentisera för att ändra ditt lösenord",
"authToViewSecrets": "Autentisera för att visa din återställningsnyckel",
"authToInitiateSignIn": "Vänligen autentisera för att initiera inloggning för säkerhetskopiering.",
"ok": "OK",
"cancel": "Avbryt",
"yes": "Ja",
"no": "Nej",
"email": "E-post",
"support": "Support",
"general": "Allmänt",
"settings": "Inställningar",
"copied": "Kopierat",
"pleaseTryAgain": "Försök igen",
"existingUser": "Befintlig användare",
"newUser": "Ny hos Ente",
"delete": "Radera",
"enterYourPasswordHint": "Ange ditt lösenord",
"forgotPassword": "Glömt lösenord",
"oops": "Hoppsan",
"suggestFeatures": "Föreslå funktionalitet",
"faq": "FAQ",
"somethingWentWrongMessage": "Något gick fel, vänligen försök igen",
"leaveFamily": "Lämna familjen",
"leaveFamilyMessage": "Är du säker på att du vill lämna familjeplanen?",
"inFamilyPlanMessage": "Du är på en familjeplan!",
"hintForMobile": "Håll i på en kod för att redigera eller ta bort.",
"hintForDesktop": "Högerklicka på en kod för att redigera eller ta bort.",
"scan": "Skanna",
"scanACode": "Skanna kod",
"verify": "Verifiera",
"verifyEmail": "Verifiera e-postadress",
"enterCodeHint": "Ange den 6-siffriga koden från din autentiseringsapp",
"lostDeviceTitle": "Förlorad enhet?",
"twoFactorAuthTitle": "Tvåfaktorsautentisering",
"passkeyAuthTitle": "Lösenordsverifiering",
"verifyPasskey": "Verifiera nyckel",
"loginWithTOTP": "Logga in med TOTP",
"recoverAccount": "Återställ konto",
"enterRecoveryKeyHint": "Ange din återställningsnyckel",
"recover": "Återställ",
"contactSupportViaEmailMessage": "Vänligen skicka ett e-postmeddelande till {email} från din registrerade e-postadress",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"invalidQRCode": "Ogiltig QR-kod",
"noRecoveryKeyTitle": "Ingen återställningsnyckel?",
"enterEmailHint": "Ange din e-postadress",
"invalidEmailTitle": "Ogiltig e-postadress",
"invalidEmailMessage": "Ange en giltig e-postadress.",
"deleteAccount": "Radera konto",
"deleteAccountQuery": "Vi kommer att vara ledsna över att se dig gå. Har du något problem?",
"yesSendFeedbackAction": "Ja, skicka feedback",
"noDeleteAccountAction": "Nej, radera konto",
"initiateAccountDeleteTitle": "Vänligen autentisera för att initiera borttagning av konto",
"sendEmail": "Skicka e-post",
"createNewAccount": "Skapa nytt konto",
"weakStrength": "Svag",
"strongStrength": "Stark",
"moderateStrength": "Måttligt",
"confirmPassword": "Bekräfta lösenord",
"close": "Stäng",
"oopsSomethingWentWrong": "Hoppsan! Något gick fel.",
"selectLanguage": "Välj språk",
"language": "Språk",
"social": "Social",
"security": "Säkerhet",
"lockscreen": "Låsskärm",
"authToChangeLockscreenSetting": "Vänligen autentisera för att ändra låsskärms inställningar",
"viewActiveSessions": "Visa aktiva sessioner",
"authToViewYourActiveSessions": "Autentisera för att visa dina aktiva sessioner",
"searchHint": "Sök...",
@@ -128,9 +207,13 @@
"error": "Fel",
"recoveryKeyCopiedToClipboard": "Återställningsnyckel kopierad till urklipp",
"recoveryKeyOnForgotPassword": "Om du glömmer ditt lösenord är det enda sättet du kan återställa dina data med denna nyckel.",
"recoveryKeySaveDescription": "Vi lagrar inte och har därför inte åtkomst till denna nyckel, vänligen spara denna 24 ords nyckel på en säker plats.",
"doThisLater": "Gör detta senare",
"saveKey": "Spara nyckel",
"save": "Spara",
"send": "Skicka",
"saveOrSendDescription": "Vill du spara detta till din lagringsmapp (Nedladdningsmappen som standard) eller skicka den till andra appar?",
"saveOnlyDescription": "Vill du spara detta till din lagringsmapp (Nedladdningsmappen som standard)?",
"back": "Tillbaka",
"createAccount": "Skapa konto",
"passwordStrength": "Lösenordsstyrka: {passwordStrengthValue}",
@@ -146,6 +229,7 @@
"message": "Password Strength: {passwordStrengthText}"
},
"password": "Lösenord",
"signUpTerms": "Jag samtycker till <u-terms>användarvillkoren</u-terms> och <u-policy>integritetspolicyn</u-policy>",
"privacyPolicyTitle": "Integritetspolicy",
"termsOfServicesTitle": "Villkor",
"encryption": "Kryptering",
@@ -153,24 +237,58 @@
"changePasswordTitle": "Ändra lösenord",
"resetPasswordTitle": "Återställ lösenord",
"encryptionKeys": "Krypteringsnycklar",
"passwordWarning": "Vi lagrar inte detta lösenord, så om du glömmer bort det, <underline>kan vi inte dekryptera dina data</underline>",
"enterPasswordToEncrypt": "Ange ett lösenord som vi kan använda för att kryptera din data",
"enterNewPasswordToEncrypt": "Ange ett nytt lösenord som vi kan använda för att kryptera din data",
"passwordChangedSuccessfully": "Lösenordet har ändrats",
"generatingEncryptionKeys": "Skapar krypteringsnycklar...",
"continueLabel": "Fortsätt",
"insecureDevice": "Osäker enhet",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Tyvärr, kunde vi inte generera säkra nycklar på den här enheten.\n\nvänligen registrera dig från en annan enhet.",
"howItWorks": "Så här fungerar det",
"ackPasswordLostWarning": "Jag förstår att om jag förlorar mitt lösenord kan jag förlora mina data eftersom min data är <underline>end-to-end-krypterad</underline>.",
"loginTerms": "Jag samtycker till <u-terms>användarvillkoren</u-terms> och <u-policy>integritetspolicyn</u-policy>",
"logInLabel": "Logga in",
"logout": "Logga ut",
"areYouSureYouWantToLogout": "Är du säker på att du vill logga ut?",
"yesLogout": "Ja, logga ut",
"exit": "Avsluta",
"theme": "Tema",
"lightTheme": "Ljust",
"darkTheme": "Mörkt",
"systemTheme": "System",
"verifyingRecoveryKey": "Verifierar återställningsnyckel...",
"recoveryKeyVerified": "Återställningsnyckel verifierad",
"recoveryKeySuccessBody": "Grymt! Din återställningsnyckel är giltig. Tack för att du verifierade.\n\nKom ihåg att hålla din återställningsnyckel säker med backups.",
"recreatePasswordTitle": "Återskapa lösenord",
"invalidKey": "Ogiltig nyckel",
"tryAgain": "Försök igen",
"viewRecoveryKey": "Visa återställningsnyckel",
"confirmRecoveryKey": "Bekräfta återställningsnyckel",
"confirmYourRecoveryKey": "Bekräfta din återställningsnyckel",
"confirm": "Bekräfta",
"emailYourLogs": "Maila dina loggar",
"copyEmailAddress": "Kopiera e-postadress",
"exportLogs": "Exportera loggar",
"enterYourRecoveryKey": "Ange din återställningsnyckel",
"about": "Om",
"weAreOpenSource": "Vi är öppen källkod!",
"privacy": "Sekretess",
"terms": "Villkor",
"checkForUpdates": "Sök efter uppdateringar",
"checkStatus": "Kontrollera status",
"downloadUpdate": "Ladda ner",
"criticalUpdateAvailable": "Kritisk uppdatering tillgänglig",
"update": "Uppdatera",
"checking": "Kontrollerar ...",
"youAreOnTheLatestVersion": "Du är på den senaste versionen",
"warning": "Varning",
"iUnderStand": "Jag förstår",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "Autentisera för att exportera dina koder",
"importSuccessTitle": "Jippi!",
"importSuccessDesc": "Du har importerat {count} koder!",
"@importSuccessDesc": {
"placeholders": {
@@ -181,40 +299,108 @@
}
}
},
"sorry": "Tyvärr",
"pendingSyncs": "Varning",
"activeSessions": "Aktiva sessioner",
"incorrectCode": "Felaktig kod",
"authenticationSuccessful": "Autentisering lyckades!",
"twofactorAuthenticationSuccessfullyReset": "Tvåfaktorsautentisering återställd",
"incorrectRecoveryKey": "Felaktig återställningsnyckel",
"enterPassword": "Ange lösenord",
"selectExportFormat": "Välj exportformat",
"encrypted": "Krypterad",
"plainText": "Enkel text",
"passwordToEncryptExport": "Lösenord för att kryptera export",
"export": "Exportera",
"useOffline": "Använd utan säkerhetskopior",
"signInToBackup": "Logga in för att säkerhetskopiera dina koder",
"singIn": "Logga in",
"showLargeIcons": "Visa stora ikoner",
"shouldHideCode": "Dölj koder",
"minimizeAppOnCopy": "Minimera appen vid kopiering",
"editCodeAuthMessage": "Autentisera för att redigera kod",
"deleteCodeAuthMessage": "Autentisera för att radera kod",
"showQRAuthMessage": "Autentisera för att visa QR-kod",
"confirmAccountDeleteTitle": "Bekräfta radering av kontot",
"androidBiometricHint": "Verifiera identitet",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "Ej godkänd. Försök igen.",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "Slutförd",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "Avbryt",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"androidSignInTitle": "Obligatorisk autentisering",
"@androidSignInTitle": {
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
},
"androidBiometricRequiredTitle": "Biometriska uppgifter krävs",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsRequiredTitle": "Enhetsuppgifter krävs",
"@androidDeviceCredentialsRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsSetupDescription": "Enhetsuppgifter krävs",
"@androidDeviceCredentialsSetupDescription": {
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
},
"goToSettings": "Gå till inställningar",
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
"iOSOkButton": "OK",
"@iOSOkButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
},
"noInternetConnection": "Ingen internetanslutning",
"pleaseCheckYourInternetConnectionAndTryAgain": "Kontrollera din internetanslutning och försök igen.",
"signOutFromOtherDevices": "Logga ut från andra enheter",
"signOutOtherDevices": "Logga ut andra enheter",
"doNotSignOut": "Logga inte ut",
"hearUsWhereTitle": "Hur hörde du talas om Ente? (valfritt)",
"hearUsExplanation": "Vi spårar inte appinstallationer, Det skulle hjälpa oss om du berättade var du hittade oss!",
"recoveryKeySaved": "Återställningsnyckel sparad i nedladdningsmappen!",
"waitingForBrowserRequest": "Väntar på webbläsarbegäran...",
"waitingForVerification": "Väntar på verifiering...",
"passkey": "Nyckel",
"passKeyPendingVerification": "Verifiering pågår fortfarande",
"loginSessionExpired": "Sessionen har gått ut",
"loginSessionExpiredDetails": "Din session har upphört. Logga in igen.",
"developerSettingsWarning": "Är du säker på att du vill ändra på utvecklarinställningar?",
"developerSettings": "Utvecklarinställningar",
"serverEndpoint": "Serverns slutpunkt",
"invalidEndpoint": "Ogiltig slutpunkt",
"invalidEndpointMessage": "Tyvärr, slutpunkten du angav är ogiltig. Ange en giltig slutpunkt och försök igen.",
"endpointUpdatedMessage": "Slutpunkten har uppdaterats",
"customEndpoint": "Ansluten till {endpoint}",
"pinText": "Fäst",
"unpinText": "Ångra fäst",
"pinnedCodeMessage": "{code} har fästs",
"pinned": "Fastmarkerad",
"tags": "Taggar",
"createNewTag": "Skapa ny tagg",
"tag": "Tagg",
"create": "Skapa",
"editTag": "Redigera tagg",
"deleteTagTitle": "Radera tagg?",
"updateNotAvailable": "Uppdateringen är inte tillgänglig",
"viewRawCodes": "Visa råa koder",
"rawCodes": "Råa koder",
"rawCodeData": "Rå koddata",
"appLock": "Applås",
"noSystemLockFound": "Inget systemlås hittades",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "För att aktivera applås, vänligen ställ in enhetens lösenord eller skärmlås i systeminställningarna.",
"autoLock": "Automatisk låsning",
"immediately": "Omedelbart",
"reEnterPassword": "Ange lösenord igen",
"reEnterPin": "Ange PIN-kod igen",
@@ -224,6 +410,8 @@
"setNewPassword": "Ställ in nytt lösenord",
"deviceLock": "Enhetslås",
"hideContent": "Dölj innehåll",
"hideContentDescriptionAndroid": "Döljer appinnehåll i app-växlaren och inaktiverar skärmdumpar",
"hideContentDescriptioniOS": "Döljer appinnehåll i app-växlaren",
"enterPin": "Ange PIN-kod",
"setNewPin": "Ställ in ny PIN-kod",
"authToViewPasskey": "Autentisera för att visa nyckel"

View File

@@ -446,8 +446,6 @@
"customEndpoint": "Bağlandı: {endpoint}",
"pinText": "Sabitle",
"unpinText": "Sabitlemeyi kaldır",
"pinnedCodeMessage": "{code} sabitlendi",
"unpinnedCodeMessage": "{code} sabitlemesi kaldırıldı",
"tags": "Etiketler",
"createNewTag": "Yeni etiket oluştur",
"tag": "Etiket",

View File

@@ -115,14 +115,14 @@
"importCodeDelimiterInfo": "Коди можуть бути розділені комою або новим рядком",
"selectFile": "Вибрати файл",
"emailVerificationToggle": "Підтвердження адреси електронної пошти",
"emailVerificationEnableWarning": "Щоб уникнути блокування доступу до свого облікового запису, обов’язково збережіть копію двофакторної аутентифікації до своєї електронної пошти за межами Ente Auth, перш ніж увімкнути перевірку електронної пошти.",
"authToChangeEmailVerificationSetting": "Будь ласка, пройдіть аутентифікацію, щоб змінити перевірку адреси електронної пошти",
"emailVerificationEnableWarning": "Щоб уникнути блокування доступу до свого облікового запису, обов’язково збережіть копію двоетапної автентифікації до своєї електронної пошти за межами Ente Auth, перш ніж увімкнути перевірку електронної пошти.",
"authToChangeEmailVerificationSetting": "Будь ласка, пройдіть автентифікацію, щоб змінити перевірку адреси електронної пошти",
"authenticateGeneric": "Будь ласка, авторизуйтеся",
"authToViewYourRecoveryKey": "Будь ласка, пройдіть аутентифікацію, щоб переглянути ваш ключ відновлення",
"authToChangeYourEmail": "Будь ласка, пройдіть аутентифікацію, щоб змінити адресу електронної пошти",
"authToChangeYourPassword": "Будь ласка, пройдіть аутентифікацію, щоб змінити ваш пароль",
"authToViewSecrets": "Будь ласка, пройдіть аутентифікацію, щоб переглянути ваші секретні коди",
"authToInitiateSignIn": "Будь ласка, пройдіть аутентифікацію, щоб розпочати вхід для резервного копіювання.",
"authToViewYourRecoveryKey": "Будь ласка, пройдіть автентифікацію, щоб переглянути ваш ключ відновлення",
"authToChangeYourEmail": "Будь ласка, пройдіть автентифікацію, щоб змінити адресу електронної пошти",
"authToChangeYourPassword": "Будь ласка, пройдіть автентифікацію, щоб змінити ваш пароль",
"authToViewSecrets": "Будь ласка, пройдіть автентифікацію, щоб переглянути ваші секретні коди",
"authToInitiateSignIn": "Будь ласка, пройдіть автентифікацію, щоб розпочати вхід для резервного копіювання.",
"ok": "Ок",
"cancel": "Скасувати",
"yes": "Так",
@@ -153,9 +153,10 @@
"verifyEmail": "Підтвердити електронну адресу",
"enterCodeHint": "Введіть нижче шестизначний код із застосунку для автентифікації",
"lostDeviceTitle": "Загубили пристрій?",
"twoFactorAuthTitle": "Двофакторна аутентифікація",
"twoFactorAuthTitle": "Двоетапна автентифікація",
"passkeyAuthTitle": "Перевірка секретного ключа",
"verifyPasskey": "Підтвердження секретного ключа",
"loginWithTOTP": "Увійти за допомогою TOTP",
"recoverAccount": "Відновити обліковий запис",
"enterRecoveryKeyHint": "Введіть ваш ключ відновлення",
"recover": "Відновлення",
@@ -193,7 +194,7 @@
"authToChangeLockscreenSetting": "Будь ласка, авторизуйтесь для зміни налаштувань екрану блокування",
"deviceLockEnablePreSteps": "Для увімкнення блокування програми, будь ласка, налаштуйте пароль пристрою або блокування екрана в системних налаштуваннях.",
"viewActiveSessions": "Показати активні сеанси",
"authToViewYourActiveSessions": "Будь ласка, пройдіть аутентифікацію, щоб переглянути ваші активні сеанси",
"authToViewYourActiveSessions": "Будь ласка, пройдіть автентифікацію, щоб переглянути ваші активні сеанси",
"searchHint": "Пошук...",
"search": "Пошук",
"sorryUnableToGenCode": "Вибачте, не вдалося створити код для {issuerName}",
@@ -257,6 +258,10 @@
"areYouSureYouWantToLogout": "Ви впевнені, що хочете вийти з системи?",
"yesLogout": "Так, вийти з системи",
"exit": "Вийти",
"theme": "Тема",
"lightTheme": "Світла",
"darkTheme": "Темна",
"systemTheme": "Як в системі",
"verifyingRecoveryKey": "Перевірка ключа відновлення...",
"recoveryKeyVerified": "Ключ відновлення перевірено",
"recoveryKeySuccessBody": "Чудово! Ваш ключ відновлення дійсний. Дякуємо за перевірку.\n\nБудь ласка, не забувайте зберігати надійну резервну копію ключа відновлення.",
@@ -327,6 +332,10 @@
}
}
},
"manualSort": "Власні",
"editOrder": "Змінити порядок",
"mostFrequentlyUsed": "Часто використовувані",
"mostRecentlyUsed": "Нещодавно використані",
"activeSessions": "Активні сеанси",
"somethingWentWrongPleaseTryAgain": "Щось пішло не так, спробуйте, будь ласка, знову",
"thisWillLogYouOutOfThisDevice": "Це призведе до виходу на цьому пристрої!",
@@ -341,9 +350,9 @@
"incorrectCode": "Невірний код",
"sorryTheCodeYouveEnteredIsIncorrect": "Вибачте, але введений вами код є невірним",
"emailChangedTo": "Адресу електронної пошти змінено на {newEmail}",
"authenticationFailedPleaseTryAgain": "Аутентифікація не пройдена. Будь ласка, спробуйте ще раз",
"authenticationFailedPleaseTryAgain": "Автентифікація не пройдена. Будь ласка, спробуйте ще раз",
"authenticationSuccessful": "Автентифікацію виконано!",
"twofactorAuthenticationSuccessfullyReset": "Двофакторна аутентифікація успішно скинута",
"twofactorAuthenticationSuccessfullyReset": "Двоетапна автентифікація успішно скинута",
"incorrectRecoveryKey": "Неправильний ключ відновлення",
"theRecoveryKeyYouEnteredIsIncorrect": "Ви ввели неправильний ключ відновлення",
"enterPassword": "Введіть пароль",
@@ -365,9 +374,9 @@
"focusOnSearchBar": "Сфокусуватися на пошуку після запуску програми",
"confirmUpdatingkey": "Ви впевнені у тому, що бажаєте змінити секретний ключ?",
"minimizeAppOnCopy": "Згорнути програму після копіювання",
"editCodeAuthMessage": "Аутентифікуйтесь, щоб змінити код",
"deleteCodeAuthMessage": "Аутентифікуйтесь, щоб видалити код",
"showQRAuthMessage": "Аутентифікуйтесь, щоб показати QR-код",
"editCodeAuthMessage": "Авторизуйтесь, щоб змінити код",
"deleteCodeAuthMessage": "Авторизуйтесь, щоб видалити код",
"showQRAuthMessage": "Авторизуйтесь, щоб показати QR-код",
"confirmAccountDeleteTitle": "Підтвердіть видалення облікового запису",
"confirmAccountDeleteMessage": "Цей обліковий запис є зв'язаним з іншими програмами Ente, якщо ви використовуєте якісь з них.\n\nВаші завантажені дані у всіх програмах Ente будуть заплановані до видалення, а обліковий запис буде видалено назавжди.",
"androidBiometricHint": "Підтвердити ідентифікацію",
@@ -386,11 +395,11 @@
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"androidSignInTitle": "Необхідна аутентифікація",
"androidSignInTitle": "Необхідна автентифікація",
"@androidSignInTitle": {
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
},
"androidBiometricRequiredTitle": "Потрібна біометрична аутентифікація",
"androidBiometricRequiredTitle": "Потрібна біометрична автентифікація",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
},
@@ -406,7 +415,7 @@
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
"androidGoToSettingsDescription": "Біометрична аутентифікація не налаштована на вашому пристрої. Перейдіть в 'Налаштування > Безпека', щоб додати біометричну аутентифікацію.",
"androidGoToSettingsDescription": "Біометрична автентифікація не налаштована на вашому пристрої. Перейдіть в «Налаштування > Безпека», щоб додати біометричну автентифікацію.",
"@androidGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side."
},
@@ -414,7 +423,7 @@
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
"iOSGoToSettingsDescription": "Біометрична аутентифікація не налаштована на вашому пристрої. Увімкніть TouchID або FaceID на вашому телефоні.",
"iOSGoToSettingsDescription": "Біометрична автентифікація не налаштована на вашому пристрої. Увімкніть TouchID або FaceID на вашому телефоні.",
"@iOSGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side."
},
@@ -448,6 +457,7 @@
"unpinText": "Відкріпити",
"pinnedCodeMessage": "{code} закріплено",
"unpinnedCodeMessage": "{code} відкріплено",
"pinned": "Закріплено",
"tags": "Мітки",
"createNewTag": "Створити нову мітку",
"tag": "Мітка",
@@ -484,5 +494,13 @@
"appLockNotEnabled": "Блокування програм не увімкнено",
"appLockNotEnabledDescription": "Увімкніть блокування програм від безпеки > Блокування програм",
"authToViewPasskey": "Будь ласка, авторизуйтеся для перегляду ключа доступу",
"appLockOfflineModeWarning": "Ви обрали продовжити без резервних копій. Якщо ви забудете свій пароль, доступ до ваших даних буде заблоковано."
"appLockOfflineModeWarning": "Ви обрали продовжити без резервних копій. Якщо ви забудете свій пароль, доступ до ваших даних буде заблоковано.",
"duplicateCodes": "Дублювати коди",
"noDuplicates": "✨ Немає дублікатів",
"youveNoDuplicateCodesThatCanBeCleared": "У вас немає дублікатів кодів, які можна очистити",
"deduplicateCodes": "Дедуплікувати коди",
"deselectAll": "Зняти виділення",
"selectAll": "Вибрати все",
"deleteDuplicates": "Видалити дублікати",
"plainHTML": "Звичайний HTML"
}

View File

@@ -139,7 +139,7 @@
"enterYourPasswordHint": "Nhập mật khẩu của bạn",
"forgotPassword": "Quên mật khẩu",
"oops": "Rất tiếc",
"suggestFeatures": "Tính năng đề nghị",
"suggestFeatures": "Gợi ý tính năng",
"faq": "Câu hỏi thường gặp",
"somethingWentWrongMessage": "Đã xảy ra lỗi, xin thử lại",
"leaveFamily": "Rời khỏi gia đình",
@@ -156,6 +156,7 @@
"twoFactorAuthTitle": "Xác thực hai yếu tố",
"passkeyAuthTitle": "Xác minh mã khóa",
"verifyPasskey": "Xác minh mã khóa",
"loginWithTOTP": "Đăng nhập bằng TOTP",
"recoverAccount": "Khôi phục tài khoản",
"enterRecoveryKeyHint": "Nhập khóa khôi phục của bạn",
"recover": "Khôi phục",
@@ -257,6 +258,10 @@
"areYouSureYouWantToLogout": "Bạn có chắc chắn muốn đăng xuất?",
"yesLogout": "Có, đăng xuất",
"exit": "Thoát",
"theme": "Chủ đề",
"lightTheme": "Sáng",
"darkTheme": "Tối",
"systemTheme": "Hệ thống",
"verifyingRecoveryKey": "Đang xác minh khóa khôi phục...",
"recoveryKeyVerified": "Khóa khôi phục đã được xác thực",
"recoveryKeySuccessBody": "Tuyệt vời! Khóa khôi phục của bạn hợp lệ. Cảm ơn bạn đã xác minh.\n\nHãy nhớ sao lưu khóa khôi phục của bạn một cách an toàn.",
@@ -327,12 +332,16 @@
}
}
},
"manualSort": "Tùy chỉnh",
"editOrder": "Chỉnh sửa đơn hàng",
"mostFrequentlyUsed": "Thường dùng",
"mostRecentlyUsed": "Dùng gần đây",
"activeSessions": "Các phiên làm việc hiện tại",
"somethingWentWrongPleaseTryAgain": "Phát hiện có lỗi, xin thử lại",
"thisWillLogYouOutOfThisDevice": "Thao tác này sẽ đăng xuất bạn khỏi thiết bị này!",
"thisWillLogYouOutOfTheFollowingDevice": "Thao tác này sẽ đăng xuất bạn khỏi thiết bị sau:",
"terminateSession": "Chấm dứt phiên?",
"terminate": "Dừng lại",
"terminateSession": "Kết thúc phiên?",
"terminate": "Kết thúc",
"thisDevice": "Thiết bị này",
"toResetVerifyEmail": "Để đặt lại mật khẩu, vui lòng xác minh email của bạn trước.",
"thisEmailIsAlreadyInUse": "Email này đã được sử dụng",
@@ -448,6 +457,7 @@
"unpinText": "Bỏ ghim",
"pinnedCodeMessage": "{code} đã được ghim",
"unpinnedCodeMessage": "{code} đã được bỏ ghim",
"pinned": "Đã ghim",
"tags": "Thẻ",
"createNewTag": "Tạo thẻ mới",
"tag": "Thẻ",
@@ -484,5 +494,12 @@
"appLockNotEnabled": "Khóa ứng dụng chưa được bật",
"appLockNotEnabledDescription": "Vui lòng bật khóa ứng dụng từ Bảo mật > Khóa ứng dụng",
"authToViewPasskey": "Vui lòng xác thực để xem mã khóa",
"appLockOfflineModeWarning": "Bạn đã chọn tiếp tục mà không có bản sao lưu. Nếu bạn quên khóa ứng dụng, bạn sẽ bị khóa khỏi việc truy cập dữ liệu của mình."
"appLockOfflineModeWarning": "Bạn đã chọn tiếp tục mà không có bản sao lưu. Nếu bạn quên khóa ứng dụng, bạn sẽ bị khóa khỏi việc truy cập dữ liệu của mình.",
"duplicateCodes": "Mã trùng lặp",
"noDuplicates": "✨ Không có trùng lặp",
"youveNoDuplicateCodesThatCanBeCleared": "Bạn không có mã trùng lặp nào có thể được xóa",
"deduplicateCodes": "Loại bỏ mã trùng lặp",
"deselectAll": "Bỏ chọn tất cả",
"selectAll": "Chọn tất cả",
"deleteDuplicates": "Xóa trùng lặp"
}

View File

@@ -156,6 +156,7 @@
"twoFactorAuthTitle": "两步验证",
"passkeyAuthTitle": "通行密钥验证",
"verifyPasskey": "验证通行密钥",
"loginWithTOTP": "使用 TOTP 登录",
"recoverAccount": "恢复账户",
"enterRecoveryKeyHint": "输入您的恢复密钥",
"recover": "恢复",
@@ -181,7 +182,7 @@
"createNewAccount": "创建新账号",
"weakStrength": "弱",
"strongStrength": "强",
"moderateStrength": "中",
"moderateStrength": "中",
"confirmPassword": "请确认密码",
"close": "关闭",
"oopsSomethingWentWrong": "哎呀,出了点问题。",
@@ -257,13 +258,17 @@
"areYouSureYouWantToLogout": "您确定要登出吗?",
"yesLogout": "是的,登出",
"exit": "退出",
"theme": "主题",
"lightTheme": "浅色",
"darkTheme": "深色",
"systemTheme": "系统",
"verifyingRecoveryKey": "正在验证恢复密钥...",
"recoveryKeyVerified": "恢复密钥已验证",
"recoveryKeySuccessBody": "太棒了! 您的恢复密钥是有效的。 感谢您的验证。\n\n请记住要安全备份您的恢复密钥。",
"invalidRecoveryKey": "您输入的恢复密钥无效。请确保它包含24个单词并检查每个单词的拼写。\n\n如果您输入了旧的恢复码请确保它长度为64个字符并检查其中每个字符。",
"recreatePasswordTitle": "重新创建密码",
"recreatePasswordBody": "当前设备的功能不足以验证您的密码,但我们可以以适用于所有设备的方式重新生成。\n\n请使用您的恢复密钥登录并重新生成您的密码如果您愿意可以再次使用相同的密码。",
"invalidKey": "无效的密钥",
"invalidKey": "密钥无效",
"tryAgain": "请再试一次",
"viewRecoveryKey": "查看恢复密钥",
"confirmRecoveryKey": "确认恢复密钥",
@@ -293,7 +298,7 @@
"youAreOnTheLatestVersion": "当前为最新版本",
"warning": "警告",
"exportWarningDesc": "导出的文件包含敏感信息。请安全存储。",
"iUnderStand": "我明白了",
"iUnderStand": "了",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
@@ -327,6 +332,10 @@
}
}
},
"manualSort": "自定义",
"editOrder": "编辑顺序",
"mostFrequentlyUsed": "经常使用",
"mostRecentlyUsed": "最近使用",
"activeSessions": "已登录的设备",
"somethingWentWrongPleaseTryAgain": "出了点问题,请重试",
"thisWillLogYouOutOfThisDevice": "这将使您登出该设备!",
@@ -374,7 +383,7 @@
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "未能识别。再试一次。",
"androidBiometricNotRecognized": "未能识别,请重试。",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
@@ -418,7 +427,7 @@
"@iOSGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side."
},
"iOSOkButton": "好",
"iOSOkButton": "好",
"@iOSOkButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
},
@@ -434,7 +443,7 @@
"waitingForBrowserRequest": "正在等待浏览器请求...",
"waitingForVerification": "等待验证...",
"passkey": "通行密钥",
"passKeyPendingVerification": "仍需进行验证",
"passKeyPendingVerification": "仍需验证",
"loginSessionExpired": "会话已过期",
"loginSessionExpiredDetails": "您的会话已过期。请重新登录。",
"developerSettingsWarning": "您确定要修改开发者设置吗?",
@@ -448,6 +457,7 @@
"unpinText": "取消置顶",
"pinnedCodeMessage": "{code} 已被置顶",
"unpinnedCodeMessage": "{code} 已被取消置顶",
"pinned": "已置顶",
"tags": "标签",
"createNewTag": "创建新标签",
"tag": "标签",
@@ -484,5 +494,13 @@
"appLockNotEnabled": "应用锁未启用",
"appLockNotEnabledDescription": "请从“安全”>“应用锁”启用应用锁",
"authToViewPasskey": "请验证身份以查看通行密钥",
"appLockOfflineModeWarning": "您已选择继续而不备份。如果您忘记了应用锁,您将无法访问数据。"
"appLockOfflineModeWarning": "您已选择继续而不备份。如果您忘记了应用锁,您将无法访问数据。",
"duplicateCodes": "重复代码",
"noDuplicates": "✨ 没有重复",
"youveNoDuplicateCodesThatCanBeCleared": "您没有可清除的重复代码",
"deduplicateCodes": "删除重复代码",
"deselectAll": "取消全选",
"selectAll": "全选",
"deleteDuplicates": "删除重复项",
"plainHTML": "Plain HTML"
}

View File

@@ -0,0 +1,15 @@
enum IconType { simpleIcon, customIcon }
class AllIconData {
final String title;
final IconType type;
final String? color;
final String? slug;
AllIconData({
required this.title,
required this.type,
required this.color,
this.slug,
});
}

View File

@@ -12,6 +12,8 @@ class CodeDisplay {
String note;
final List<String> tags;
int position;
String iconSrc;
String iconID;
CodeDisplay({
this.pinned = false,
@@ -21,8 +23,12 @@ class CodeDisplay {
this.tags = const [],
this.note = '',
this.position = 0,
this.iconSrc = '',
this.iconID = '',
});
bool get isCustomIcon => (iconSrc != '' && iconID != '');
// copyWith
CodeDisplay copyWith({
bool? pinned,
@@ -32,6 +38,8 @@ class CodeDisplay {
List<String>? tags,
String? note,
int? position,
String? iconSrc,
String? iconID,
}) {
final bool updatedPinned = pinned ?? this.pinned;
final bool updatedTrashed = trashed ?? this.trashed;
@@ -40,6 +48,8 @@ class CodeDisplay {
final List<String> updatedTags = tags ?? this.tags;
final String updatedNote = note ?? this.note;
final int updatedPosition = position ?? this.position;
final String updatedIconSrc = iconSrc ?? this.iconSrc;
final String updatedIconID = iconID ?? this.iconID;
return CodeDisplay(
pinned: updatedPinned,
@@ -49,6 +59,8 @@ class CodeDisplay {
tags: updatedTags,
note: updatedNote,
position: updatedPosition,
iconSrc: updatedIconSrc,
iconID: updatedIconID,
);
}
@@ -64,6 +76,8 @@ class CodeDisplay {
tags: List<String>.from(json['tags'] ?? []),
note: json['note'] ?? '',
position: json['position'] ?? 0,
iconSrc: json['iconSrc'] ?? 'ente',
iconID: json['iconID'] ?? '',
);
}
@@ -106,6 +120,8 @@ class CodeDisplay {
'tags': tags,
'note': note,
'position': position,
'iconSrc': iconSrc,
'iconID': iconID,
};
}

View File

@@ -59,21 +59,22 @@ class TagChip extends StatelessWidget {
),
child: Row(
children: [
if (iconData != null) ...[
if (iconData != null)
Icon(
iconData,
size: 16,
size: label.isNotEmpty ? 16 : 20,
color: color,
),
if (iconData != null && label.isNotEmpty)
const SizedBox(width: 8),
],
Text(
label,
style: TextStyle(
color: color,
fontSize: 14,
if (label.isNotEmpty)
Text(
label,
style: TextStyle(
color: color,
fontSize: 14,
),
),
),
],
),
),

View File

@@ -3,6 +3,7 @@ import 'dart:async';
import 'package:ente_auth/core/event_bus.dart';
import 'package:ente_auth/events/codes_updated_event.dart';
import "package:ente_auth/l10n/l10n.dart";
import 'package:ente_auth/models/all_icon_data.dart';
import 'package:ente_auth/models/code.dart';
import 'package:ente_auth/models/code_display.dart';
import 'package:ente_auth/onboarding/model/tag_enums.dart';
@@ -13,7 +14,10 @@ import 'package:ente_auth/onboarding/view/common/tag_chip.dart';
import 'package:ente_auth/store/code_display_store.dart';
import 'package:ente_auth/theme/ente_theme.dart';
import 'package:ente_auth/ui/components/buttons/button_widget.dart';
import 'package:ente_auth/ui/components/custom_icon_widget.dart';
import 'package:ente_auth/ui/components/models/button_result.dart';
import 'package:ente_auth/ui/custom_icon_page.dart';
import 'package:ente_auth/ui/utils/icon_utils.dart';
import 'package:ente_auth/utils/dialog_util.dart';
import 'package:ente_auth/utils/toast_util.dart';
import 'package:ente_auth/utils/totp_util.dart';
@@ -42,6 +46,9 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
late List<String> selectedTags = [...?widget.code?.display.tags];
List<String> allTags = [];
StreamSubscription<CodesUpdatedEvent>? _streamSubscription;
bool isCustomIcon = false;
String _customIconID = "";
late IconType _iconSrc;
@override
void initState() {
@@ -81,6 +88,19 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
_limitTextLength(_accountController, _otherTextLimit);
_limitTextLength(_secretController, _otherTextLimit);
}
isCustomIcon = widget.code?.display.isCustomIcon ?? false;
if (isCustomIcon) {
_customIconID = widget.code?.display.iconID ?? "ente";
} else {
if (widget.code != null) {
_customIconID = widget.code!.issuer;
}
}
_iconSrc = widget.code?.display.iconSrc == "simpleIcon"
? IconType.simpleIcon
: IconType.customIcon;
super.initState();
}
@@ -120,191 +140,208 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Row(
if (widget.code != null)
GestureDetector(
onTap: () async {
await navigateToCustomIconPage();
},
child: CustomIconWidget(iconData: _customIconID),
),
const SizedBox(height: 20),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
FieldLabel(l10n.codeIssuerHint),
Expanded(
child: TextFormField(
// The validator receives the text that the user has entered.
validator: (value) {
if (value == null || value.isEmpty) {
return "Please enter some text";
}
return null;
},
decoration: const InputDecoration(
contentPadding: EdgeInsets.symmetric(vertical: 12.0),
),
style: getEnteTextTheme(context).small,
controller: _issuerController,
autofocus: true,
),
),
],
),
Row(
children: [
FieldLabel(l10n.secret),
Expanded(
child: TextFormField(
// The validator receives the text that the user has entered.
validator: (value) {
if (value == null || value.isEmpty) {
return "Please enter some text";
}
return null;
},
style: getEnteTextTheme(context).small,
decoration: InputDecoration(
contentPadding:
const EdgeInsets.symmetric(vertical: 12.0),
suffixIcon: GestureDetector(
// padding: EdgeInsets.zero,
onTap: () {
setState(() {
_secretKeyObscured = !_secretKeyObscured;
});
Row(
children: [
FieldLabel(l10n.codeIssuerHint),
Expanded(
child: TextFormField(
// The validator receives the text that the user has entered.
validator: (value) {
if (value == null || value.isEmpty) {
return "Please enter some text";
}
return null;
},
child: _secretKeyObscured
? const Icon(
Icons.visibility_off_rounded,
size: 18,
)
: const Icon(
Icons.visibility_rounded,
size: 18,
),
decoration: const InputDecoration(
contentPadding:
EdgeInsets.symmetric(vertical: 12.0),
),
style: getEnteTextTheme(context).small,
controller: _issuerController,
autofocus: true,
),
),
obscureText: _secretKeyObscured,
controller: _secretController,
),
],
),
],
),
Row(
children: [
FieldLabel(l10n.account),
Expanded(
child: TextFormField(
// The validator receives the text that the user has entered.
validator: (value) {
if (value == null || value.isEmpty) {
return "Please enter some text";
}
return null;
},
decoration: const InputDecoration(
contentPadding: EdgeInsets.symmetric(vertical: 12.0),
Row(
children: [
FieldLabel(l10n.secret),
Expanded(
child: TextFormField(
// The validator receives the text that the user has entered.
validator: (value) {
if (value == null || value.isEmpty) {
return "Please enter some text";
}
return null;
},
style: getEnteTextTheme(context).small,
decoration: InputDecoration(
contentPadding:
const EdgeInsets.symmetric(vertical: 12.0),
suffixIcon: GestureDetector(
// padding: EdgeInsets.zero,
onTap: () {
setState(() {
_secretKeyObscured = !_secretKeyObscured;
});
},
child: _secretKeyObscured
? const Icon(
Icons.visibility_off_rounded,
size: 18,
)
: const Icon(
Icons.visibility_rounded,
size: 18,
),
),
),
obscureText: _secretKeyObscured,
controller: _secretController,
),
),
style: getEnteTextTheme(context).small,
controller: _accountController,
),
],
),
],
),
const SizedBox(height: 12),
Row(
children: [
FieldLabel(l10n.notes),
Expanded(
child: TextFormField(
// The validator receives the text that the user has entered.
validator: (value) {
if (value == null || value.isEmpty) {
return "Please enter some text";
}
if (value.length > _notesLimit) {
return "Notes can't be more than 1000 characters";
}
return null;
},
maxLength: _notesLimit,
minLines: 1,
maxLines: 5,
decoration: const InputDecoration(
contentPadding: EdgeInsets.symmetric(vertical: 12.0),
Row(
children: [
FieldLabel(l10n.account),
Expanded(
child: TextFormField(
// The validator receives the text that the user has entered.
validator: (value) {
if (value == null || value.isEmpty) {
return "Please enter some text";
}
return null;
},
decoration: const InputDecoration(
contentPadding:
EdgeInsets.symmetric(vertical: 12.0),
),
style: getEnteTextTheme(context).small,
controller: _accountController,
),
),
style: getEnteTextTheme(context).small,
controller: _notesController,
),
],
),
],
),
const SizedBox(height: 12),
Wrap(
spacing: 12,
alignment: WrapAlignment.start,
children: [
...allTags.map(
(e) => TagChip(
label: e,
action: TagChipAction.check,
state: selectedTags.contains(e)
? TagChipState.selected
: TagChipState.unselected,
onTap: () {
if (selectedTags.contains(e)) {
selectedTags.remove(e);
} else {
selectedTags.add(e);
}
setState(() {});
},
),
const SizedBox(height: 12),
Row(
children: [
FieldLabel(l10n.notes),
Expanded(
child: TextFormField(
// The validator receives the text that the user has entered.
validator: (value) {
if (value == null || value.isEmpty) {
return "Please enter some text";
}
if (value.length > _notesLimit) {
return "Notes can't be more than 1000 characters";
}
return null;
},
maxLength: _notesLimit,
minLines: 1,
maxLines: 5,
decoration: const InputDecoration(
contentPadding:
EdgeInsets.symmetric(vertical: 12.0),
),
style: getEnteTextTheme(context).small,
controller: _notesController,
),
),
],
),
AddChip(
onTap: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AddTagDialog(
onTap: (tag) {
final exist = allTags.contains(tag);
if (exist && selectedTags.contains(tag)) {
return Navigator.pop(context);
}
if (!exist) allTags.add(tag);
selectedTags.add(tag);
setState(() {});
Navigator.pop(context);
const SizedBox(height: 12),
Wrap(
spacing: 12,
alignment: WrapAlignment.start,
children: [
...allTags.map(
(e) => TagChip(
label: e,
action: TagChipAction.check,
state: selectedTags.contains(e)
? TagChipState.selected
: TagChipState.unselected,
onTap: () {
if (selectedTags.contains(e)) {
selectedTags.remove(e);
} else {
selectedTags.add(e);
}
setState(() {});
},
),
),
AddChip(
onTap: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AddTagDialog(
onTap: (tag) {
final exist = allTags.contains(tag);
if (exist && selectedTags.contains(tag)) {
return Navigator.pop(context);
}
if (!exist) allTags.add(tag);
selectedTags.add(tag);
setState(() {});
Navigator.pop(context);
},
);
},
barrierColor: Colors.black.withOpacity(0.85),
barrierDismissible: false,
);
},
barrierColor: Colors.black.withOpacity(0.85),
barrierDismissible: false,
);
},
),
],
),
const SizedBox(height: 40),
SizedBox(
width: 400,
child: OutlinedButton(
onPressed: () async {
if ((_accountController.text.trim().isEmpty &&
_issuerController.text.trim().isEmpty) ||
_secretController.text.trim().isEmpty) {
String message;
if (_secretController.text.trim().isEmpty) {
message = context.l10n.secretCanNotBeEmpty;
} else {
message =
context.l10n.bothIssuerAndAccountCanNotBeEmpty;
}
_showIncorrectDetailsDialog(
context,
message: message,
);
return;
}
await _saveCode();
},
child: Text(l10n.saveAction),
),
),
],
),
const SizedBox(
height: 40,
),
SizedBox(
width: 400,
child: OutlinedButton(
onPressed: () async {
if ((_accountController.text.trim().isEmpty &&
_issuerController.text.trim().isEmpty) ||
_secretController.text.trim().isEmpty) {
String message;
if (_secretController.text.trim().isEmpty) {
message = context.l10n.secretCanNotBeEmpty;
} else {
message =
context.l10n.bothIssuerAndAccountCanNotBeEmpty;
}
_showIncorrectDetailsDialog(context, message: message);
return;
}
await _saveCode();
},
child: Text(l10n.saveAction),
),
),
],
),
),
@@ -324,6 +361,11 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
widget.code?.display.copyWith(tags: selectedTags) ??
CodeDisplay(tags: selectedTags);
display.note = notes;
display.iconID = _customIconID.toLowerCase();
display.iconSrc =
_iconSrc == IconType.simpleIcon ? 'simpleIcon' : 'customIcon';
if (widget.code != null && widget.code!.secret != secret) {
ButtonResult? result = await showChoiceActionSheet(
context,
@@ -373,4 +415,28 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
message ?? context.l10n.pleaseVerifyDetails,
);
}
Future<void> navigateToCustomIconPage() async {
final allIcons = IconUtils.instance.getAllIcons();
String currentIcon;
if (widget.code!.display.isCustomIcon) {
currentIcon = widget.code!.display.iconID;
} else {
currentIcon = widget.code!.issuer;
}
final AllIconData newCustomIcon = await Navigator.of(context).push(
MaterialPageRoute(
builder: (context) {
return CustomIconPage(
currentIcon: currentIcon,
allIcons: allIcons,
);
},
),
);
setState(() {
_customIconID = newCustomIcon.title;
_iconSrc = newCustomIcon.type;
});
}
}

View File

@@ -0,0 +1,56 @@
import 'package:ente_auth/models/code.dart';
import 'package:ente_auth/store/code_store.dart';
import 'package:logging/logging.dart';
class DeduplicationService {
final _logger = Logger("DeduplicationService");
DeduplicationService._privateConstructor();
static final DeduplicationService instance =
DeduplicationService._privateConstructor();
Future<List<DuplicateCodes>> getDuplicateCodes() async {
try {
final List<DuplicateCodes> result = await _getDuplicateCodes();
return result;
} catch (e, s) {
_logger.severe("failed to get dedupeCode", e, s);
rethrow;
}
}
Future<List<DuplicateCodes>> _getDuplicateCodes() async {
final codes = await CodeStore.instance.getAllCodes();
final List<DuplicateCodes> duplicateCodes = [];
Map<String, List<Code>> uniqueCodes = {};
for (final code in codes) {
if (code.hasError || code.isTrashed) continue;
final uniqueKey = "${code.secret}_${code.issuer}_${code.account}";
if (uniqueCodes.containsKey(uniqueKey)) {
uniqueCodes[uniqueKey]!.add(code);
} else {
uniqueCodes[uniqueKey] = [code];
}
}
for (final key in uniqueCodes.keys) {
if (uniqueCodes[key]!.length > 1) {
duplicateCodes.add(DuplicateCodes(key, uniqueCodes[key]!));
}
}
return duplicateCodes;
}
}
class DuplicateCodes {
String hash;
final List<Code> codes;
DuplicateCodes(
this.hash,
this.codes,
);
}

View File

@@ -1,6 +1,6 @@
import 'package:ente_auth/core/constants.dart';
import 'package:ente_auth/core/network.dart';
import 'package:ente_auth/utils/dialog_util.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:logging/logging.dart';
import 'package:url_launcher/url_launcher_string.dart';
@@ -11,11 +11,13 @@ class PasskeyService {
final _enteDio = Network.instance.enteDio;
Future<String> getJwtToken() async {
Future<String> getAccountsUrl() async {
final response = await _enteDio.get(
"/users/accounts-token",
);
return response.data!["accountsToken"] as String;
final accountsUrl = response.data!["accountsUrl"] ?? kAccountsUrl;
final jwtToken = response.data!["accountsToken"] as String;
return "$accountsUrl/passkeys?token=$jwtToken";
}
Future<bool> isPasskeyRecoveryEnabled() async {
@@ -25,10 +27,6 @@ class PasskeyService {
return response.data!["isPasskeyRecoveryEnabled"] as bool;
}
String get accountsUrl {
return kDebugMode ? "http://localhost:3001" : "https://accounts.ente.io";
}
Future<void> configurePasskeyRecovery(
String secret,
String userEncryptedSecret,
@@ -46,8 +44,7 @@ class PasskeyService {
Future<void> openPasskeyPage(BuildContext context) async {
try {
final jwtToken = await getJwtToken();
final url = "$accountsUrl/passkeys?token=$jwtToken";
final url = await getAccountsUrl();
await launchUrlString(
url,
mode: LaunchMode.externalApplication,

View File

@@ -2,6 +2,14 @@ import 'package:ente_auth/core/event_bus.dart';
import 'package:ente_auth/events/icons_changed_event.dart';
import 'package:shared_preferences/shared_preferences.dart';
enum CodeSortKey {
issuerName,
accountName,
mostFrequentlyUsed,
recentlyUsed,
manual,
}
class PreferenceService {
PreferenceService._privateConstructor();
static final PreferenceService instance =
@@ -28,6 +36,15 @@ class PreferenceService {
}
}
CodeSortKey codeSortKey() {
return CodeSortKey
.values[_prefs.getInt("codeSortKey") ?? CodeSortKey.manual.index];
}
Future<void> setCodeSortKey(CodeSortKey key) async {
await _prefs.setInt("codeSortKey", key.index);
}
Future<void> setHasShownCoachMark(bool value) {
return _prefs.setBool(kHasShownCoachMarkKey, value);
}

View File

@@ -59,9 +59,9 @@ class UpdateService {
return _latestVersion;
}
Future<void> showUpdateNotification() async {
Future<bool> showUpdateNotification() async {
if (!isIndependent()) {
return;
return false;
}
final shouldUpdate = await this.shouldUpdate();
final lastNotificationShownTime =
@@ -72,15 +72,19 @@ class UpdateService {
if (shouldUpdate &&
hasBeen3DaysSinceLastNotification &&
_latestVersion!.shouldNotify!) {
unawaited(
NotificationService.instance.showNotification(
"Update available",
"Click to install our best version yet",
),
);
await _prefs.setInt(kUpdateAvailableShownTimeKey, now);
if (Platform.isAndroid) {
unawaited(
NotificationService.instance.showNotification(
"Update available",
"Click to install our best version yet",
),
);
}
return true;
} else {
_logger.info("Debouncing notification");
return false;
}
}

View File

@@ -379,14 +379,17 @@ class UserService {
if (response.statusCode == 200) {
Widget page;
final String passkeySessionID = response.data["passkeySessionID"];
final String accountsUrl = response.data["accountsUrl"] ?? kAccountsUrl;
String twoFASessionID = response.data["twoFactorSessionID"];
if (twoFASessionID.isEmpty) {
if (twoFASessionID.isEmpty &&
response.data["twoFactorSessionIDV2"] != null) {
twoFASessionID = response.data["twoFactorSessionIDV2"];
}
if (passkeySessionID.isNotEmpty) {
page = PasskeyPage(
passkeySessionID,
totp2FASessionID: twoFASessionID,
accountsUrl: accountsUrl,
);
} else if (twoFASessionID.isNotEmpty) {
page = TwoFactorAuthenticationPage(twoFASessionID);
@@ -691,8 +694,10 @@ class UserService {
if (response.statusCode == 200) {
Widget? page;
final String passkeySessionID = response.data["passkeySessionID"];
final String accountsUrl = response.data["accountsUrl"] ?? kAccountsUrl;
String twoFASessionID = response.data["twoFactorSessionID"];
if (twoFASessionID.isEmpty) {
if (twoFASessionID.isEmpty &&
response.data["twoFactorSessionIDV2"] != null) {
twoFASessionID = response.data["twoFactorSessionIDV2"];
}
Configuration.instance.setVolatilePassword(userPassword);
@@ -700,6 +705,7 @@ class UserService {
page = PasskeyPage(
passkeySessionID,
totp2FASessionID: twoFASessionID,
accountsUrl: accountsUrl,
);
} else if (twoFASessionID.isNotEmpty) {
page = TwoFactorAuthenticationPage(twoFASessionID);

View File

@@ -25,22 +25,42 @@ class CodeStore {
}
Future<bool> saveUpadedIndexes(List<Code> codes) async {
int changedCount = 0;
final existingAllCodes = await getAllCodes();
final existingPosition = {};
for (final code in existingAllCodes) {
if (code.hasError || code.isTrashed) {
continue;
}
existingPosition[code.generatedID] = code.display.position;
}
for (final code in codes) {
if (code.hasError || code.isTrashed) {
continue;
}
Code? c = _cacheCodes[code.generatedID];
if (c == null) {
int? oldIndex = existingPosition[code.generatedID];
if (oldIndex == null) {
continue;
}
int oldIndex = c.display.position;
int newIndex = codes.indexOf(code);
if (oldIndex != newIndex) {
Code updatedCode =
c.copyWith(display: c.display.copyWith(position: newIndex));
await addCode(updatedCode);
code.copyWith(display: code.display.copyWith(position: newIndex));
await addCode(
updatedCode,
shouldSync: false,
existingAllCodes: existingAllCodes,
);
changedCount++;
}
}
_logger.info("changedCount index for $changedCount codes");
if (changedCount > 0 &&
_authenticatorService.getAccountMode() == AccountMode.online) {
_authenticatorService.onlineSync().ignore();
}
return true;
}
@@ -115,9 +135,10 @@ class CodeStore {
Code code, {
bool shouldSync = true,
AccountMode? accountMode,
List<Code>? existingAllCodes,
}) async {
final mode = accountMode ?? _authenticatorService.getAccountMode();
final allCodes = await getAllCodes(accountMode: mode);
final allCodes = existingAllCodes ?? (await getAllCodes(accountMode: mode));
bool isExistingCode = false;
bool hasSameCode = false;
for (final existingCode in allCodes) {

View File

@@ -1,58 +1,58 @@
import 'package:ente_auth/services/preference_service.dart';
import 'dart:async';
import 'dart:io';
import 'package:ente_auth/theme/ente_theme.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
class CodeTimerProgressCache {
static final Map<int, CodeTimerProgress> _cache = {};
static CodeTimerProgress getCachedWidget(int period) {
if (!_cache.containsKey(period)) {
_cache[period] = CodeTimerProgress(period: period);
}
return _cache[period]!;
}
}
class CodeTimerProgress extends StatefulWidget {
final int period;
final bool isCompactMode;
const CodeTimerProgress({
super.key,
required this.period,
this.isCompactMode = false,
});
@override
State<CodeTimerProgress> createState() => _CodeTimerProgressState();
}
class _CodeTimerProgressState extends State<CodeTimerProgress>
with SingleTickerProviderStateMixin {
late final Ticker _ticker;
class _CodeTimerProgressState extends State<CodeTimerProgress> {
late final Timer _timer;
late final ValueNotifier<double> _progress;
late final int _microSecondsInPeriod;
late bool _isCompactMode=false;
late final int _periodInMicros;
// Cache the start time to avoid repeated system calls
late final int _startMicros;
// Reduce update frequency
final int _updateIntervalMs =
(Platform.isAndroid || Platform.isIOS) ? 16 : 500; // approximately 60 FPS
@override
void initState() {
super.initState();
_microSecondsInPeriod = widget.period * 1000000;
_periodInMicros = widget.period * 1000000;
_progress = ValueNotifier<double>(0.0);
_ticker = createTicker(_updateTimeRemaining);
_ticker.start();
_isCompactMode = PreferenceService.instance.isCompactMode();
_updateTimeRemaining(Duration.zero);
_startMicros = DateTime.now().microsecondsSinceEpoch;
// Use a Timer instead of a Ticker
_timer = Timer.periodic(Duration(milliseconds: _updateIntervalMs), (timer) {
final now = DateTime.now().microsecondsSinceEpoch;
_updateTimeRemaining(now);
});
}
void _updateTimeRemaining(Duration elapsed) {
int timeRemaining = _microSecondsInPeriod -
(DateTime.now().microsecondsSinceEpoch % _microSecondsInPeriod);
_progress.value = timeRemaining / _microSecondsInPeriod;
void _updateTimeRemaining(int currentMicros) {
// More efficient time calculation using modulo
final elapsed = (currentMicros - _startMicros) % _periodInMicros;
final timeRemaining = _periodInMicros - elapsed;
_progress.value = timeRemaining / _periodInMicros;
}
@override
void dispose() {
_ticker.dispose();
_timer.cancel();
_progress.dispose();
super.dispose();
}
@@ -60,18 +60,19 @@ class _CodeTimerProgressState extends State<CodeTimerProgress>
@override
Widget build(BuildContext context) {
return SizedBox(
height: _isCompactMode ?1:3,
height: widget.isCompactMode ? 1 : 3,
child: ValueListenableBuilder<double>(
valueListenable: _progress,
builder: (context, progress, _) {
return CustomPaint(
key: Key(progress.toString()), // Add key here
painter: _ProgressPainter(
progress: progress,
color: progress > 0.4
? getEnteColorScheme(context).primary700
: Colors.orange,
),
size: Size.infinite,
size: const Size.fromHeight(double.infinity),
);
},
),
@@ -83,7 +84,10 @@ class _ProgressPainter extends CustomPainter {
final double progress;
final Color color;
_ProgressPainter({required this.progress, required this.color});
const _ProgressPainter({
required this.progress,
required this.color,
});
@override
void paint(Canvas canvas, Size size) {

View File

@@ -32,11 +32,13 @@ import 'package:move_to_background/move_to_background.dart';
class CodeWidget extends StatefulWidget {
final Code code;
final bool isCompactMode;
final CodeSortKey? sortKey;
const CodeWidget(
this.code, {
super.key,
required this.isCompactMode,
this.sortKey,
});
@override
@@ -55,6 +57,7 @@ class _CodeWidgetState extends State<CodeWidget> {
bool isMaskingEnabled = false;
int _codeTimeStep = -1;
int lastRefreshTime = 0;
bool ignorePin = false;
@override
void initState() {
@@ -97,6 +100,7 @@ class _CodeWidgetState extends State<CodeWidget> {
@override
Widget build(BuildContext context) {
ignorePin = widget.sortKey == null || widget.sortKey == CodeSortKey.manual;
final colorScheme = getEnteColorScheme(context);
if (isMaskingEnabled != PreferenceService.instance.shouldHideCodes()) {
isMaskingEnabled = PreferenceService.instance.shouldHideCodes();
@@ -115,7 +119,7 @@ class _CodeWidgetState extends State<CodeWidget> {
Widget getCardContents(AppLocalizations l10n) {
return Stack(
children: [
if (widget.code.isPinned)
if (!ignorePin && widget.code.isPinned)
Align(
alignment: Alignment.topRight,
child: CustomPaint(
@@ -142,8 +146,10 @@ class _CodeWidgetState extends State<CodeWidget> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
if (widget.code.type.isTOTPCompatible)
CodeTimerProgressCache.getCachedWidget(
widget.code.period,
CodeTimerProgress(
key: ValueKey('period_${widget.code.period}'),
period: widget.code.period,
isCompactMode: widget.isCompactMode,
),
widget.isCompactMode
? const SizedBox(height: 4)
@@ -169,7 +175,7 @@ class _CodeWidgetState extends State<CodeWidget> {
: const SizedBox(height: 32),
],
),
if (widget.code.isPinned) ...[
if (!ignorePin && widget.code.isPinned) ...[
Align(
alignment: Alignment.topRight,
child: Padding(
@@ -222,6 +228,7 @@ class _CodeWidgetState extends State<CodeWidget> {
builder: (_) {
return BottomActionBarWidget(
code: widget.code,
showPin: !ignorePin,
onEdit: () => _onEditPressed(true),
onShare: () => _onSharePressed(true),
onPin: () => _onPinPressed(true),
@@ -270,7 +277,7 @@ class _CodeWidgetState extends State<CodeWidget> {
icon: Icons.notes_outlined,
onSelected: () => _onShowNotesPressed(null),
),
if (!widget.code.isTrashed)
if (!widget.code.isTrashed && !ignorePin)
MenuItem(
label:
widget.code.isPinned ? l10n.unpinText : l10n.pinText,
@@ -440,13 +447,19 @@ class _CodeWidgetState extends State<CodeWidget> {
}
Widget _getIcon() {
final String iconData;
if (widget.code.display.isCustomIcon) {
iconData = widget.code.display.iconID;
} else {
iconData = widget.code.issuer;
}
return Padding(
padding: _shouldShowLargeIcon
? EdgeInsets.only(left: widget.isCompactMode ? 12 : 16)
: const EdgeInsets.all(0),
child: IconUtils.instance.getIcon(
context,
safeDecode(widget.code.issuer).trim(),
safeDecode(iconData).trim(),
width: widget.isCompactMode
? (_shouldShowLargeIcon ? 32 : 24)
: (_shouldShowLargeIcon ? 42 : 24),
@@ -454,11 +467,12 @@ class _CodeWidgetState extends State<CodeWidget> {
);
}
void _copyCurrentOTPToClipboard() async {
void _copyCurrentOTPToClipboard() {
_copyToClipboard(
_getCurrentOTP(),
confirmationMessage: context.l10n.copiedToClipboard,
);
_udateCodeMetadata().ignore();
}
void _copyNextToClipboard() {
@@ -466,6 +480,26 @@ class _CodeWidgetState extends State<CodeWidget> {
_getNextTotp(),
confirmationMessage: context.l10n.copiedNextToClipboard,
);
_udateCodeMetadata().ignore();
}
Future<void> _udateCodeMetadata() async {
if (widget.sortKey == null) return;
Future.delayed(const Duration(milliseconds: 100), () {
if (mounted) {
if (widget.sortKey == CodeSortKey.mostFrequentlyUsed ||
widget.sortKey == CodeSortKey.recentlyUsed) {
final display = widget.code.display;
final Code code = widget.code.copyWith(
display: display.copyWith(
tapCount: display.tapCount + 1,
lastUsedAt: DateTime.now().microsecondsSinceEpoch,
),
);
unawaited(CodeStore.instance.addCode(code));
}
}
});
}
void _copyToClipboard(

View File

@@ -19,10 +19,12 @@ class BottomActionBarWidget extends StatelessWidget {
final VoidCallback? onRestore;
final VoidCallback? onDelete;
final VoidCallback? onTrashed;
final bool showPin;
const BottomActionBarWidget({
required this.code,
this.onCancel,
this.showPin = true,
this.backgroundColor,
super.key,
this.onShare,
@@ -65,6 +67,7 @@ class BottomActionBarWidget extends StatelessWidget {
const SizedBox(height: 8),
CodeSelectionActionsWidget(
code: code,
showPin: showPin,
onShare: onShare,
onPin: onPin,
onShowQR: onShowQR,

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