Compare commits

..

550 Commits

Author SHA1 Message Date
Neeraj
9a527a15f5 [auth] Fix export with invalid algo name (#4712)
## Description
Fixes https://github.com/ente-io/ente/issues/4404
## Tests
2025-01-14 10:19:59 +05:30
Neeraj Gupta
ab3589a2b1 [auth] Bump version 2025-01-14 10:15:46 +05:30
Neeraj Gupta
6df88cda36 [auth] Fix export for imports with invalid algoname 2025-01-14 10:15:25 +05:30
Neeraj Gupta
d2b16bd84b [auth] Fix import 2025-01-14 09:40:00 +05:30
Neeraj Gupta
d08bb5ea11 [auth] Handle invalid export of Google Auth codes 2025-01-14 09:38:54 +05:30
Neeraj
a1779af68d [auth] Fix workflow for Ubuntu build (#4711)
## Description

## Tests
2025-01-14 09:05:27 +05:30
Neeraj Gupta
0c690efc38 [auth] Fix workflow for Ubuntu build 2025-01-14 09:04:47 +05:30
Neeraj
975eabab60 [auth] Update Github build action (#4710)
## Description

## Tests
2025-01-14 08:48:50 +05:30
Neeraj Gupta
82225a0f2a [auth] Update Github build action 2025-01-14 08:48:22 +05:30
Neeraj
36afb54925 [auth] Update Github build action (#4709)
## Description

## Tests
2025-01-14 08:42:26 +05:30
Neeraj Gupta
61e8a86ca5 [auth] Update Github build action 2025-01-14 08:41:21 +05:30
Neeraj
cdff3b8099 [auth] Update version (#4708)
## Description

## Tests
2025-01-14 08:09:58 +05:30
Neeraj Gupta
1e792e392e [auth] Update version 2025-01-14 08:09:28 +05:30
Neeraj
379622a986 [auth] Fix logo for Enom (#4707)
Fix enom logo "slug"

## Description
Enom logo wasn't working

## Tests
tested this edit on the desktop version and worked.
2025-01-14 08:08:30 +05:30
ludespeedny
cf9711580c Update custom-icons.json
Fix enom logo "slug"
2025-01-13 20:09:24 -05:00
Neeraj
2661a99dae [auth] Fix content not scrolling when font size set to large (#4700)
## Description
Fix #4399 
  

![image](https://github.com/user-attachments/assets/f5d7186e-a29b-4eed-98bc-68521599f3bf)



![image](https://github.com/user-attachments/assets/65409fab-37c2-4f6e-9f78-7c84c2c0d095)
2025-01-14 06:21:06 +05:30
Neeraj
8afb88d7dc [auth] fix generic icon not updating when issuer name is changed (#4705)
## Description
Fix #4683 
1. If the name of `issuer` is change the icon is updated accordingly
2. If the `issuer` name and the `custom icon` (from the icon picker)
both are changed than the final icon is selected from the custom icon.

## Tests
2025-01-14 06:20:42 +05:30
Aman Raj Singh Mourya
6ed24b413b [auth] fix generic icon not updating when issuer name is changed 2025-01-13 23:01:45 +05:30
Manav Rathi
c912776273 [desktop] notifyImmediately for updates when triggered by user action (#4704) 2025-01-13 20:43:57 +05:30
Manav Rathi
fee24b331e [desktop] notifyImmediately for updates when triggered by user action 2025-01-13 20:39:32 +05:30
Manav Rathi
3ab14e106c [desktop] The next beta release train rolls into the platform (#4703) 2025-01-13 19:57:16 +05:30
Manav Rathi
95010eb8c8 [desktop] The next beta release train rolls into the platform 2025-01-13 19:55:19 +05:30
Manav Rathi
e33394129f photosd-v1.7.8 (#4702) 2025-01-13 19:30:34 +05:30
Manav Rathi
c2803fd7c0 photosd-v1.7.8 2025-01-13 19:28:53 +05:30
Manav Rathi
72b78aa3ab [docs] Use relative link (#4701) 2025-01-13 19:26:49 +05:30
Manav Rathi
46f2d33281 [docs] Use relative link 2025-01-13 19:24:39 +05:30
Neeraj
ef159540db [auth] Use issuerName as default sort key (#4699)
## Description

Resolves https://github.com/ente-io/ente/issues/4670 (confusion for
users who upgrade or install the app on a new device)


## Tests
2025-01-13 17:02:14 +05:30
Neeraj Gupta
b9f519d4ad [auth] Use issuerName as default sort key 2025-01-13 16:59:21 +05:30
Aman Raj Singh Mourya
c79400c6d5 [auth] fix content not show when font size set to large from device settings 2025-01-13 16:58:41 +05:30
Neeraj
d99d6eedc5 [auth] Update auth ios icon (#4698)
## Description

## Tests
2025-01-13 16:17:20 +05:30
Neeraj Gupta
d691dff28c Merge remote-tracking branch 'origin/main' into iosIcons 2025-01-13 16:10:16 +05:30
Neeraj Gupta
f7ee2512aa [auth] update ios icons 2025-01-13 16:09:37 +05:30
Neeraj Gupta
6ca447f730 [auth] Fix auth launch background color 2025-01-13 16:00:51 +05:30
Neeraj
08e05d513f [auth] Fix privacy screen color for dark mode (#4696)
## Description

## Tests
2025-01-13 15:52:03 +05:30
Yoann Dumont
3999115b3a [auth] Adding 2 new custom icons for AzurHosts, MineNode and AzurWare (#4678)
Add 2 new icons : 
<img
src="https://github.com/user-attachments/assets/f8a68248-e4e3-4d51-8675-b4098496741a"
alt="azurhosts" width="64" height="64">
<img
src="https://github.com/user-attachments/assets/6029cdd6-7a61-480e-a562-d684e7955794"
alt="azurware" width="64" height="64">
2025-01-13 15:49:53 +05:30
Neeraj Gupta
cc1037afa8 [auth] Fix privacy screen color for dark mode 2025-01-13 15:48:58 +05:30
Manav Rathi
1190b570ac [desktop] Fix drag and drop on watch folders dialog (#4694) 2025-01-13 13:45:00 +05:30
Manav Rathi
d8a5fbce22 Tweak 2025-01-13 13:38:49 +05:30
Manav Rathi
e1316b443e Button 2025-01-13 13:33:16 +05:30
Manav Rathi
f64edf088a T 2025-01-13 13:26:46 +05:30
Manav Rathi
ebdccfad14 T 2025-01-13 13:16:07 +05:30
Manav Rathi
8fa18e9993 Move 2025-01-13 13:12:45 +05:30
Manav Rathi
50245fd6ea Tweak 2025-01-13 13:11:24 +05:30
Manav Rathi
fe16c0128e [desktop] Fix drag and drop on watch folders dialog 2025-01-13 13:05:27 +05:30
Manav Rathi
ff787fde99 Rearrange 2025-01-13 12:26:12 +05:30
Manav Rathi
0251144b11 [web] Restore translations for search (#4690)
Crowdin apparently overrode them even when we selected the option to
retain translations when changing the case and then manually fixing the
case in their web UI.
2025-01-13 09:42:26 +05:30
Manav Rathi
2f673be3b3 [web] Restore translations for search
Crowdin apparently overrode them even when we selected the option to retain
translations when changing the case and then manually fixing the case in their
web UI.
2025-01-13 09:22:46 +05:30
Manav Rathi
51e8cba473 [web] New translations (#4687)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-01-13 09:14:21 +05:30
Crowdin Bot
a8f5281e93 New Crowdin translations by GitHub Action 2025-01-13 03:42:35 +00:00
Jonathan Beliën
3d999b3fcb [Auth] Add Fastmail logo (#4685)
## Description

Add Fastmail logo for Ente Auth.

I've initially wanted to use the official logo available from
https://www.fastmail.com/media-kit/ but I noticed you need SVG, so I
went to https://commons.wikimedia.org/wiki/File:Fastmail_icon_2019.svg

Hexadecimal color is also from Logo guidelines
(https://www.fastmail.com/assets/brand/Fastmail-Logo-Guidelines-March-2019-V1.pdf).

## Tests
2025-01-13 09:08:53 +05:30
Manav Rathi
d249346f28 Update RUNNING.md (#4684)
Fix link to 'Running without docker'
2025-01-13 09:04:58 +05:30
Neeraj
c718ecee10 [mobile] New translations (#4688)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2025-01-13 09:04:44 +05:30
Neeraj
8385ae40e2 [auth] New translations (#4689)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2025-01-13 09:04:17 +05:30
Crowdin Bot
9fc544d4b1 New Crowdin translations by GitHub Action 2025-01-13 01:17:34 +00:00
Crowdin Bot
3c169ec452 New Crowdin translations by GitHub Action 2025-01-13 01:05:20 +00:00
optisamit
787a4c9684 Update RUNNING.md
Fix link to 'Running without docker'
2025-01-12 16:34:40 +02:00
Vishnu Mohandas
73674259f2 [auth] Fix app bar Icon spacing (#4681)
## Description

![image](https://github.com/user-attachments/assets/6978b416-6942-4424-8c35-1da5dc42aaa6)

## Tests
2025-01-12 12:35:13 +05:30
Aman Raj Singh Mourya
eb635bc3b3 [auth] fix app bar icon spacing 2025-01-12 12:12:57 +05:30
Neeraj
025982c149 [auth] Enable translation for more languages (#4674)
## Description

## Tests
2025-01-11 16:33:25 +05:30
Neeraj Gupta
f2b5a39ca9 [auth] Fix translation 2025-01-11 16:31:26 +05:30
Neeraj Gupta
eec79447dc [auth] Ignore macos/build 2025-01-11 16:24:14 +05:30
Neeraj Gupta
7ffdcb4f13 [auth] Fix order 2025-01-11 16:23:27 +05:30
Neeraj Gupta
da79d1fad3 Merge remote-tracking branch 'origin/main' into enable_lang 2025-01-11 16:22:42 +05:30
Neeraj
018d91d5d1 [auth] New translations (#4675)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2025-01-11 16:22:30 +05:30
Crowdin Bot
49d5be35c2 New Crowdin translations by GitHub Action 2025-01-11 10:51:50 +00:00
Neeraj Gupta
81bf43e269 [auth] Enable translation for more languages 2025-01-11 16:18:51 +05:30
Neeraj
6dc59e35e6 [auth] Update flatpak version (#4668)
## Description

## Tests
2025-01-11 13:20:24 +05:30
Neeraj Gupta
023c5185ce Update flatpak version 2025-01-11 13:16:57 +05:30
Neeraj
54f9908eff [auth][mob] Gracefully handle registration error (#4666)
## Description

## Tests
2025-01-11 12:19:01 +05:30
Neeraj Gupta
d8118d10dc [mob] Handle registration error 2025-01-11 12:13:33 +05:30
Neeraj Gupta
5bd0d3369d [auth] Handle registration error 2025-01-11 11:57:19 +05:30
Vishnu Mohandas
8263eb3912 [museum] Update mail (#4665) 2025-01-11 11:21:11 +05:30
vishnukvmd
a5fc5a75a8 [museum] Update mail 2025-01-11 11:20:40 +05:30
Neeraj
9306a4df57 [auth] Bump version & hide import from gallery for external users (#4664)
## Description

## Tests
2025-01-11 11:18:31 +05:30
Neeraj Gupta
df30a3e768 [auth] Bump version 4.2.4 2025-01-11 11:13:50 +05:30
Neeraj Gupta
4056787721 Show import from gallery for internal users 2025-01-11 11:13:28 +05:30
Neeraj
18f398f6c2 [auth] Fix 2fas import (#4663)
## Description

## Tests
2025-01-11 11:11:06 +05:30
Neeraj Gupta
69911f6c02 [auth] Fix 2fas import 2025-01-11 11:01:06 +05:30
Neeraj
b94f9c9616 [mob] Fix stuck uploads due to lock & surface upload error on backup status (#4658)
## Description

## Tests
2025-01-11 09:34:56 +05:30
Neeraj Gupta
c18dec516a [mob] Lint fix 2025-01-11 09:32:47 +05:30
Neeraj Gupta
1c4581d56d [mob] Eager release log in case of silent errors 2025-01-11 09:29:22 +05:30
Neeraj Gupta
63ad770f39 [mob] Change buffer from 24h to 4h 2025-01-11 09:13:54 +05:30
Manav Rathi
a483a20112 [web] Notification UI level improvements (#4660) 2025-01-10 20:01:25 +05:30
Manav Rathi
b23f9a1a88 Fix types 2025-01-10 19:52:03 +05:30
Manav Rathi
41e90ce3b6 Fix 2025-01-10 19:48:07 +05:30
Manav Rathi
719f548185 Fix 2025-01-10 19:35:45 +05:30
Manav Rathi
ee4cf8885d Improve 2025-01-10 19:26:59 +05:30
Manav Rathi
3436cfc266 Tweak 2025-01-10 19:04:44 +05:30
Manav Rathi
2c5d5f8d35 Button cannot contain another button 2025-01-10 18:47:08 +05:30
Manav Rathi
d8e7415c36 Use 2025-01-10 18:35:23 +05:30
Manav Rathi
b97c2ccedb new-ify 2025-01-10 18:29:51 +05:30
Manav Rathi
cbf221500a Doc 2025-01-10 18:17:57 +05:30
Manav Rathi
4e9e50fc4b nf 2025-01-10 18:00:40 +05:30
Neeraj Gupta
8db5efd5aa [mob] Fix bug that was causing lock to be not released in certain cases 2025-01-10 17:53:07 +05:30
Neeraj Gupta
d51d8f190a [mob] Show upload failure message on backup status 2025-01-10 17:41:22 +05:30
Manav Rathi
21c6e1eae2 Move 2025-01-10 17:26:18 +05:30
Manav Rathi
c9c36f7419 Minor ver updates 2025-01-10 17:11:59 +05:30
Manav Rathi
efcc7b6342 [web] Remove global styles (3/4) (#4659)
Only apps/photos is left.
2025-01-10 16:53:37 +05:30
Manav Rathi
ea2e9f1fd4 lf 2025-01-10 16:32:45 +05:30
Manav Rathi
b78efd441d Unglob 2025-01-10 16:26:11 +05:30
Manav Rathi
d87f8e04ee Unused 2025-01-10 16:25:16 +05:30
Manav Rathi
d2a787acbe Conv 2025-01-10 16:24:51 +05:30
Manav Rathi
b781e5a536 Use 2025-01-10 16:21:36 +05:30
Manav Rathi
2b72cd718e Prune 2025-01-10 16:15:35 +05:30
Manav Rathi
9618cd64c1 Update 2025-01-10 15:49:04 +05:30
Manav Rathi
874a7121b2 Use 2025-01-10 15:41:34 +05:30
Manav Rathi
1ea632d3e7 Reuse 2025-01-10 15:37:50 +05:30
Manav Rathi
c322bc7b04 Scope 2025-01-10 14:53:51 +05:30
Manav Rathi
705a93e6d6 Fix 2025-01-10 14:51:32 +05:30
Manav Rathi
6967fa4caf Update 2025-01-10 14:49:35 +05:30
Manav Rathi
54d3e8f7f5 Conv 2025-01-10 14:48:35 +05:30
Manav Rathi
46d0a6f1c8 Prune 2025-01-10 14:41:59 +05:30
Manav Rathi
96f3c7dd45 Auth doesn't have sidebar to redirect to change-email 2025-01-10 14:38:19 +05:30
Neeraj Gupta
86c6836dc6 [mob] Log last HB time for the BG task 2025-01-10 14:37:11 +05:30
Manav Rathi
0168e1d851 Prune 2025-01-10 14:36:31 +05:30
Manav Rathi
563df12262 conv 2025-01-10 14:34:01 +05:30
Manav Rathi
625be594d6 Fix 2025-01-10 14:31:27 +05:30
Neeraj Gupta
c0ce7a97b1 [mob] Reduce lock expiry buffer 2025-01-10 14:29:54 +05:30
Manav Rathi
563834a8fd gen 2025-01-10 14:27:19 +05:30
Manav Rathi
bb0294ef64 li 2025-01-10 14:20:55 +05:30
Manav Rathi
2368225578 Tweak 2025-01-10 13:57:41 +05:30
Manav Rathi
6a263e2176 Conv 2025-01-10 13:53:46 +05:30
Manav Rathi
642c9e611b Conv 2025-01-10 12:53:55 +05:30
Manav Rathi
fdded49bda Conv 2025-01-10 12:45:02 +05:30
Manav Rathi
17dd67afc0 Conv 2025-01-10 12:38:03 +05:30
Manav Rathi
ad5cad8e97 Reuse 2025-01-10 12:35:23 +05:30
Manav Rathi
5d7ca1ac44 Bespoke 2025-01-10 12:27:41 +05:30
Manav Rathi
c8b64f585c Fix 2025-01-10 12:09:16 +05:30
Manav Rathi
6db59247cd L2 2025-01-10 12:05:10 +05:30
Manav Rathi
96305adedc Tweak 2025-01-10 11:50:55 +05:30
Manav Rathi
6bef1d2e20 New layout 2025-01-10 11:49:27 +05:30
Neeraj
0a8f7a995b Fixes to make the source 32bit compatible (#4643)
## Description
I have tried to build ente server using the source and have found
various bugs that in a 64bit system would not pose an issue but when ran
on 32bit architecture would result in errors. After the fixes, Ente
works beautifully.

## Why bother merging?
I understand that Ente does not support 32bit architectures by nature
and hence there would be no point in merging this PR and solving these
issues but I have put this PR out there in hopes that it helps others
run Ente on their own desired architecture.

## Changes Description
1. `billing.go` - `storage` variables are not properly typed as int64
despite them being able to hold more than the 32bit integer limit. On a
32bit system, this will lead to an integer overflow (especially with the
default 5GB value). Typing them appropriately as an int64 will resolve
this bug and have no impacts on a 64bit execution.
2. `rate_limit.go` - The code as is will result in an unaligned 64bit
atomic operation ([read
more](https://blog.openziti.io/my-pi-day-journey-with-go-64-bit-alignment)).
In short, the fields were ordered in a way that `count` would start at
the middle of an 8-byte block which is not permitted. Aligning it by
reordering it does not affect the functional aspect but in terms of
golang's memory management, the int64 fields are now properly at an
8-byte boundary, fixing the issue.

## Other 32bit changes
To other open source tinkerers out there, if you wish to use Ente on a
32bit architecture, the dependencies will also need to be recompiled and
rebuilt as they do not have openly available docker images for arm32.
Feel free to use [my built
images](https://github.com/fourjr/ente-megarepo-arm32v7).
2025-01-10 11:19:59 +05:30
Neeraj
d8c68ed0ee [auth] Add QR Code Scanning from Saved Images for 2FA Setup (#4457) 2025-01-10 11:16:17 +05:30
Neeraj
683506a54e [mob] Improve index fetch when localIndexing is disabled (#4650)
## Description

## Tests
2025-01-10 10:57:47 +05:30
Manav Rathi
50350c6cc7 Up 2025-01-10 10:46:30 +05:30
Manav Rathi
43bc1b1374 Abstract 2025-01-10 10:33:58 +05:30
Manav Rathi
a859386edb R 2025-01-10 10:25:30 +05:30
Manav Rathi
fa9ba408a3 T 2025-01-10 10:08:17 +05:30
Manav Rathi
f3efad60f3 logs 2025-01-10 08:45:40 +05:30
Manav Rathi
287add7bb7 Remove glob 2025-01-10 08:30:44 +05:30
Manav Rathi
f00bc2ca5b Tweak 2025-01-10 08:28:54 +05:30
Manav Rathi
5e28110fc9 wip unglob 2025-01-10 08:21:03 +05:30
Manav Rathi
b921ca7493 wip Ungloblicate 2025-01-10 08:20:52 +05:30
Manav Rathi
c9b0b1ceea Remove global 2025-01-10 07:47:46 +05:30
Manav Rathi
bfaae99aaf Towards removing the global styles 2025-01-10 07:24:19 +05:30
Manav Rathi
cce6562a4d Comment 2025-01-10 07:21:49 +05:30
Manav Rathi
2c56f7e8c8 Simplify 2025-01-10 06:52:03 +05:30
Manav Rathi
39103e6937 [web] Misc improvements (non functional) (#4654) 2025-01-09 20:13:00 +05:30
Manav Rathi
ea417bd46a H 2025-01-09 19:57:11 +05:30
Manav Rathi
5f33fe9215 F 2025-01-09 19:48:14 +05:30
Manav Rathi
fe9cccd3ab LO 2025-01-09 19:46:03 +05:30
Manav Rathi
623bb66fa7 T 2025-01-09 19:29:43 +05:30
Manav Rathi
efb15e3866 T 2025-01-09 19:19:33 +05:30
Manav Rathi
f46a0befdf T 2025-01-09 19:06:19 +05:30
Manav Rathi
1d5af6f3bc T 2025-01-09 18:59:27 +05:30
Manav Rathi
784073df7f [web] Improve font handling (#4653) 2025-01-09 18:40:51 +05:30
Manav Rathi
f3852948c8 lf 2025-01-09 18:34:56 +05:30
Manav Rathi
02a1679255 uc 2025-01-09 18:30:57 +05:30
Manav Rathi
1570cf9745 From theme 2025-01-09 18:15:38 +05:30
Manav Rathi
df8108f027 mui 2025-01-09 18:12:17 +05:30
Manav Rathi
15dbd9ee3e Unused 2025-01-09 17:49:47 +05:30
Manav Rathi
a453668138 pk 2025-01-09 17:49:47 +05:30
Manav Rathi
60c136d9a9 T 2025-01-09 17:49:47 +05:30
Manav Rathi
ef5856abe4 T 2025-01-09 17:49:47 +05:30
Manav Rathi
6123d00361 Prune 2025-01-09 17:49:47 +05:30
Manav Rathi
e4990d1fd5 MU 2025-01-09 17:49:47 +05:30
Manav Rathi
485f0e25a7 sx 2025-01-09 17:49:47 +05:30
Manav Rathi
107cfe53bf Fix 2025-01-09 17:49:47 +05:30
Manav Rathi
2c2b8c1522 sx 2025-01-09 17:49:47 +05:30
Manav Rathi
fb9f99bc1c sx 2025-01-09 17:49:47 +05:30
Manav Rathi
35a47828e9 occam 2025-01-09 17:49:47 +05:30
Manav Rathi
940f91e4e1 Set h3 default to medium
In couple of places this changes the look, but this was intentional.
2025-01-09 17:49:46 +05:30
Manav Rathi
a6e16092f9 Fix 2025-01-09 17:49:46 +05:30
Manav Rathi
6db07c30e2 Update 2025-01-09 17:49:46 +05:30
Manav Rathi
dd41b1fb29 Update 2025-01-09 17:49:46 +05:30
Manav Rathi
3302a8a6ca Update 2025-01-09 17:49:46 +05:30
Manav Rathi
830185a089 Rest 2025-01-09 17:49:46 +05:30
Manav Rathi
e9153635ea NEXT_PUBLIC_ENTE_TRACE 2025-01-09 17:49:46 +05:30
Manav Rathi
5da89e0e65 Unused 2025-01-09 17:49:46 +05:30
Manav Rathi
a52a159691 Reuse 2025-01-09 17:49:46 +05:30
Manav Rathi
e47accb866 Medium 2025-01-09 17:49:46 +05:30
Manav Rathi
bd7e300959 fw 2025-01-09 17:49:46 +05:30
Manav Rathi
5456a17e04 Use Inter Var 2025-01-09 17:49:46 +05:30
Manav Rathi
f0d7343a69 Dup and redirect 2025-01-09 17:49:46 +05:30
Manav Rathi
81d031d03e Inline 2025-01-09 17:49:46 +05:30
Manav Rathi
1a3b51eb0e iv 2025-01-09 17:49:46 +05:30
Manav Rathi
baa44d98d1 Add debug instrumentation for route change 2025-01-09 17:49:46 +05:30
Manav Rathi
307a8bba88 [web] Fix video upload on metadata parsing errors (#4651) 2025-01-09 17:46:14 +05:30
Manav Rathi
404706f1ef [web] Fix video upload on metadata parsing errors 2025-01-09 17:45:08 +05:30
Neeraj Gupta
c49aeb0be8 Lint fix 2025-01-09 17:19:52 +05:30
Neeraj Gupta
feb9414636 [mob] Bump version 2025-01-09 15:28:33 +05:30
Neeraj Gupta
54be847f80 [mob] Extract strings 2025-01-09 15:27:59 +05:30
Neeraj Gupta
0a6121e1fa [mob] Fix fetch for shared file index when local indexing is disabled 2025-01-09 15:25:40 +05:30
Neeraj Gupta
fec2de85ad [mob] Show index percentage 2025-01-09 14:26:37 +05:30
Laurens Priem
719c7bb636 Better logging and handling of inconsistent person cluster mappings (#4642)
## Description

Better logs the case where clusters are mapped to non-existant Persons,
and deletes the mapping in such cases
2025-01-09 06:45:24 +01:00
Manav Rathi
a1c6e559d4 [web] Fix navbar in uncategorized section (#4648) 2025-01-09 09:41:54 +05:30
Manav Rathi
d2c1255a1c [web] Fix navbar in uncategorized section 2025-01-09 09:38:07 +05:30
Manav Rathi
b37a08ad1e Fixed link in web-app self-hosting guide (#4644)
## Description
- Fixes link to `local.yaml`

## Tests
- None
2025-01-09 06:55:33 +05:30
Tobias Genannt
1c43ca4123 Fixed link in web-app self-hosting guide 2025-01-08 16:22:54 +01:00
Yee Jia Rong
c0a3abb0ed Fixes to make the source 32bit compatible 2025-01-08 22:04:44 +08:00
laurenspriem
71dab9b5ac [mob][photos] Try catch log on transaction 2025-01-08 14:07:41 +01:00
laurenspriem
7aa476b19d [mob][photos] Log missing persons stronger 2025-01-08 14:04:14 +01:00
laurenspriem
5c42d797c7 [mob][photos] Log sentry 2025-01-08 13:53:08 +01:00
laurenspriem
cfa8054091 [mob][photos] Log in Sentry 2025-01-08 13:52:14 +01:00
laurenspriem
2d34e9e97c [mob][photos] Better log and handle clusterperson edge case 2025-01-08 13:47:52 +01:00
Neeraj
8fed95f3dc [mob] Shared indexing (#4639)
## Description

## Tests
2025-01-08 16:45:02 +05:30
Neeraj Gupta
0b4e225ccc [mob] Set old prop while creating shared link 2025-01-08 16:40:55 +05:30
Neeraj Gupta
6730953958 [mob] Bump version 2025-01-08 16:37:42 +05:30
Neeraj Gupta
0db5370dea Lint fix 2025-01-08 16:36:41 +05:30
Manav Rathi
065bc85cad [web] New translations (#4641)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-01-08 16:35:54 +05:30
Neeraj Gupta
132c270136 [mob] Avoid redudant state refresh when section is not expanded 2025-01-08 16:32:13 +05:30
Crowdin Bot
74373037fc New Crowdin translations by GitHub Action 2025-01-08 11:02:09 +00:00
Manav Rathi
921b8881ce [web] Prune and document the transKeepBasicHtmlNodesFor translation option (#4640) 2025-01-08 16:31:25 +05:30
Manav Rathi
9152960be0 Doc 2025-01-08 16:27:47 +05:30
Manav Rathi
c9685c97b5 Unused 2025-01-08 16:20:09 +05:30
Neeraj Gupta
188bb4a9f4 [mob] Included shared file in index count 2025-01-08 16:18:26 +05:30
Manav Rathi
5655b0e55b Un-div 2025-01-08 16:18:23 +05:30
Neeraj Gupta
ae0654fce4 Merge remote-tracking branch 'origin/main' into pull_shared_indexes 2025-01-08 16:08:35 +05:30
Neeraj Gupta
8ab6109a77 [mob] Index shared files 2025-01-08 16:08:21 +05:30
Neeraj
acc8f6974a [server] Fixed typo (#4638)
## Description

## Tests
2025-01-08 15:52:37 +05:30
Neeraj Gupta
e2f62a390d [server] Fixed typoe 2025-01-08 15:47:55 +05:30
Manav Rathi
60fcba38cc [meta] Minor fix to GHCR push workflow branch tagging (#4637) 2025-01-08 15:45:27 +05:30
Manav Rathi
7d12141199 [meta] Need to qualify the ref to push from a detached HEAD 2025-01-08 15:44:14 +05:30
Manav Rathi
228e1b17e4 [web] New translations (#4636)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-01-08 15:16:41 +05:30
Crowdin Bot
4e6ff712a2 New Crowdin translations by GitHub Action 2025-01-08 09:44:49 +00:00
Manav Rathi
0c344baf14 [web] Translation improvements (#4635) 2025-01-08 15:14:01 +05:30
Manav Rathi
72e39a23da R 2025-01-08 15:09:44 +05:30
Manav Rathi
762f6d6f1d R 2025-01-08 15:04:17 +05:30
Manav Rathi
e4bbac174a Unused + R 2025-01-08 15:02:39 +05:30
Manav Rathi
0724a26986 R 2025-01-08 14:58:54 +05:30
Manav Rathi
55a3eddb34 Dedup 2025-01-08 14:55:38 +05:30
Manav Rathi
5754e77b20 R 2025-01-08 14:54:54 +05:30
Manav Rathi
4004ceb8b1 R 2025-01-08 14:48:07 +05:30
Manav Rathi
8692b22da1 R 2025-01-08 14:36:14 +05:30
Manav Rathi
106acba45d Dedup 2025-01-08 14:31:20 +05:30
Manav Rathi
1b97fc24d8 R 2025-01-08 14:29:47 +05:30
Manav Rathi
52450de36a [web] New translations (#4634)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-01-08 14:26:23 +05:30
Crowdin Bot
71038a7e28 New Crowdin translations by GitHub Action 2025-01-08 08:55:34 +00:00
Manav Rathi
61b42a0f1a [desktop] Shared indexes (#4633)
Sibling of https://github.com/ente-io/ente/pull/4569
2025-01-08 14:24:46 +05:30
Neeraj
8656f698c0 [server] Enable metadata r/w for shared files (#4569)
## Description

## Tests
Will test happy cases and update here
2025-01-08 14:23:13 +05:30
Neeraj Gupta
db4b560a3c [server] Allow write metadata for shared files 2025-01-08 13:57:46 +05:30
Manav Rathi
ac3fbf8cb1 ui 2025-01-08 13:56:10 +05:30
Manav Rathi
af56da987e shared indexes 2025-01-08 12:59:09 +05:30
Neeraj
a33f5b83d5 [mob][auth] Add certificate fingerprint (#4632)
## Description

## Tests
2025-01-08 12:28:22 +05:30
Neeraj Gupta
3fb60c17c9 [auth] Add certificate fingerprint 2025-01-08 12:27:39 +05:30
Neeraj Gupta
645023a76d [mob] Pull shared indexes 2025-01-08 12:23:24 +05:30
Neeraj
8d804940b3 [mob] Add certificate fingerprint 2025-01-08 12:22:23 +05:30
Manav Rathi
7c4fe3c61b [desktop] Fix native thumbnail gen instead of using web fallback (#4631)
Broken in nightlies because of the recent react-dropzone update.
2025-01-08 12:11:28 +05:30
Manav Rathi
60fadbb465 Pin to fix a issue where drag and drop on desktop will not obtain file path 2025-01-08 12:05:36 +05:30
Ashil
50aff81d18 [mob][photos] Use better batching when freeing up space in batches on iOS (#4630)
## Description

On iOS, deletion fails without any error if a batch has at least one
shared file. The only indicator that deletion failed is `List<String>`
returned by `PhotoManager.editor.deleteWithIds` will be empty.

So if shared files are distributed pretty evenly across list of
`localIDs` to be deleted, almost all batches would fail even with a
batch size of 10 (which was the minimum batch size before this change).

Recursively trying with a smaller batch size if the bigger batch size
fails makes it possible to delete all non-shared local files with more
system delete conformation dialogs though, but gets the work done for
users blocked on this.


```plaintext
[A, B, C, D, E]
 └─ Attempt to delete; if failure:
    ├─ [A, B]
    │  └─ Attempt to delete; if failure:
    │     ├─ [A]
    │     └─ [B]
    └─ [C, D, E]
       └─ Attempt to delete; if failure:
          ├─ [C]
          └─ [D, E]
             └─ Attempt to delete; if failure:
                ├─ [D]
                └─ [E]
2025-01-08 12:02:19 +05:30
Manav Rathi
a692a7b70c Remove unnecessary pins 2025-01-08 12:00:45 +05:30
ashilkn
fb7a441efe [mob][photos] Bump up to v0.9.76 2025-01-08 11:48:32 +05:30
Laurens Priem
50c65125a7 Clusterface (#4626)
## Description

Fixed bug where we showed "Face not clustered yet, please come back
later" toast message even for faces which had a score too low to ever be
clustered automatically.
2025-01-08 07:02:45 +01:00
Laurens Priem
0488e5013d [mob][photos] Fix sync issue adding cluster (#4623)
## Description

## Tests
2025-01-08 07:01:22 +01:00
ashilkn
5cd0a654bb [mob][photos] Show loading state when on deleting each batch 2025-01-08 11:31:07 +05:30
Alan Moyano
ac92f564fa Fix Belo icon displaying as a violet square instead of the correct icon (#4619)
Fixing the icon introduced in https://github.com/ente-io/ente/pull/4548
2025-01-08 11:30:55 +05:30
Manav Rathi
ff7763934e [web] Parse description from image metadata (#4629)
- Implements
https://github.com/ente-io/ente/discussions/3857#discussioncomment-11764990
- Tested on the samples provided therein.
2025-01-08 08:34:17 +05:30
Manav Rathi
f6ca19babc [web] Parse description from image metadata
- Implements https://github.com/ente-io/ente/discussions/3857#discussioncomment-11764990
- Tested on the samples provided therein.
2025-01-08 08:27:37 +05:30
laurenspriem
38d7438dc4 [mob][photos] Fix showing toast too often 2025-01-07 20:01:36 +01:00
laurenspriem
2cee052f3f [mob][photos] Comment 2025-01-07 19:59:14 +01:00
laurenspriem
af42576e45 [mob][photos] Simplify 2025-01-07 19:48:09 +01:00
laurenspriem
6f63158699 [mob][photos] Simplify 2025-01-07 19:45:34 +01:00
laurenspriem
2c41efb672 [mob][photos] dev log 2025-01-07 19:15:28 +01:00
ashilkn
aac9c73d05 [mob][photos] Try deleting in batches in a better way if deletion fails in one shot by splitting a batch into two if deletion fails and repeat the process recursively on each half until deletion succeeds 2025-01-07 21:26:32 +05:30
laurenspriem
92eab74917 [mob][photos] Fix sync issue adding cluster 2025-01-07 16:01:18 +01:00
Manav Rathi
ead2b3d3d6 [web] New translations (#4622)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-01-07 20:28:46 +05:30
Crowdin Bot
c24bb97762 New Crowdin translations by GitHub Action 2025-01-07 14:56:27 +00:00
Manav Rathi
c7a59eb880 [web] Improvements to our use of MUI (#4621) 2025-01-07 20:25:29 +05:30
Manav Rathi
16e1ab2049 fw 2025-01-07 20:06:08 +05:30
Manav Rathi
e5d2b21a97 Undep 2025-01-07 19:56:12 +05:30
Manav Rathi
0f1a6a29fe large size => fullWidth 2025-01-07 19:52:18 +05:30
Manav Rathi
e0af77181d Unneeded 2025-01-07 19:29:57 +05:30
Manav Rathi
fe0d7417af C 2025-01-07 19:21:39 +05:30
Manav Rathi
a6d420bbaa h6 2025-01-07 19:10:47 +05:30
Manav Rathi
456c52c175 Move 2025-01-07 19:07:31 +05:30
Manav Rathi
b374ee1e99 Use 2025-01-07 19:02:19 +05:30
Manav Rathi
7c44a160a0 Comment 2025-01-07 18:09:03 +05:30
Manav Rathi
15283cbc73 It's the default already 2025-01-07 18:09:03 +05:30
Manav Rathi
b5c7e9d6ac Unused 2025-01-07 18:09:03 +05:30
Manav Rathi
ec5a1d9359 -blur 2025-01-07 18:09:03 +05:30
Manav Rathi
e13797e02e Move fixed colors out of theme 2025-01-07 18:09:03 +05:30
ashilkn
c608550534 [mob][photos] Update log message for more clarity 2025-01-07 17:09:29 +05:30
Neeraj Gupta
2083632c20 Fix check for single file 2025-01-07 15:57:19 +05:30
Neeraj Gupta
6898f0dbcb Improve err 2025-01-07 15:57:19 +05:30
Neeraj Gupta
48a0bce211 Minor refactor 2025-01-07 15:57:19 +05:30
Neeraj Gupta
d262503b75 [server] Fix access check 2025-01-07 15:57:19 +05:30
Neeraj Gupta
af533ebc1d [server] Enable metadata fetch for shared files 2025-01-07 15:57:19 +05:30
Neeraj
65d144be77 [mob][server] Join albums via link (#4607)
## Description

## Tests
2025-01-07 15:35:07 +05:30
Neeraj Gupta
44ffb99b0b Remove unused import 2025-01-07 15:31:13 +05:30
Neeraj Gupta
93cc5cc8a2 [mob] Extract strings 2025-01-07 15:11:41 +05:30
Neeraj Gupta
7062aacf35 [mob] Handle albums with download disabled 2025-01-07 14:42:53 +05:30
ashilkn
d24555314d [mob][photos] Minor fix 2025-01-07 13:46:10 +05:30
Neeraj Gupta
e2d72c71b4 [mob] Open existing shared collection 2025-01-07 13:44:29 +05:30
Neeraj Gupta
5a593c27b0 [mob] Lint fix 2025-01-07 13:33:01 +05:30
Ashil
ebe35c285b [mob][photos] Fix null check operator used on null value exception (#4617) 2025-01-07 13:31:22 +05:30
ashilkn
99405ebc2e [mob][photos] Fix null check operator used on null value exception 2025-01-07 13:28:47 +05:30
Neeraj Gupta
9e901c78ef [server] Send email when link is joined 2025-01-07 11:45:46 +05:30
Neeraj Gupta
167d2c5d29 Merge remote-tracking branch 'origin/main' into join_change 2025-01-07 11:24:53 +05:30
Neeraj Gupta
9b9112ba4a [server] Disable join by default 2025-01-07 11:24:42 +05:30
Neeraj Gupta
c16289fca9 [server] Return correct value for enableJoin flag 2025-01-07 11:24:42 +05:30
Neeraj Gupta
ca0deb60e7 [mob] Enable join for links created by internal users 2025-01-07 11:20:50 +05:30
Manav Rathi
e8cebdc2c7 [web] New translations (#4616)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-01-07 11:05:21 +05:30
Crowdin Bot
9bd78de4cd New Crowdin translations by GitHub Action 2025-01-07 05:34:38 +00:00
Manav Rathi
55744a9be3 [web] Translation improvements (#4615) 2025-01-07 11:03:49 +05:30
Manav Rathi
6325e3f886 Fix 2025-01-07 10:58:11 +05:30
Manav Rathi
ad0de74721 R 2025-01-07 10:46:34 +05:30
Manav Rathi
1058dd89fb R 2025-01-07 10:44:56 +05:30
Manav Rathi
f60ea405a6 R 2025-01-07 10:43:04 +05:30
Manav Rathi
86c8b4d6b6 R 2025-01-07 10:41:55 +05:30
Manav Rathi
fddc7961ad R 2025-01-07 10:40:26 +05:30
Manav Rathi
5bf9b63bc9 Move 2025-01-07 10:38:45 +05:30
Manav Rathi
d0d1578b1a R 2025-01-07 10:37:31 +05:30
Manav Rathi
291d62ca0e R 2025-01-07 10:25:19 +05:30
Manav Rathi
e9dfb77109 R 2025-01-07 10:18:15 +05:30
Manav Rathi
34caf1f56e Fix casing 2025-01-07 10:17:21 +05:30
Manav Rathi
fb3cb54c93 Rename 2025-01-07 10:13:05 +05:30
Manav Rathi
b36faca264 Update AASA to be more specific on what links to open (#4612)
## Description

iOS sometimes falls back to opening Ente Photos app if Safari is
disabled and AASA claims all paths even if a non-matching domain link is
tapped. So making it more specific in AASA on what to open.
2025-01-07 09:48:07 +05:30
Neeraj Gupta
1d803552da extract strings 2025-01-07 09:47:35 +05:30
ashilkn
645171ae9d Update AASA to be more specific on what links to open 2025-01-06 19:50:06 +05:30
Manav Rathi
161c2c1df6 [web] Consistently use <Stack direction="row> when we want a horizontal stack (#4610) 2025-01-06 17:04:48 +05:30
Manav Rathi
7adb64f0f5 Convert Box/flex => Stack/row
> Box component is not intended to be used with Figma, it's a specific implementation based on the underlying style engine we are using which might be removed once we switched to Pigment CSS (not related to design again).
>
> https://github.com/mui/material-ui/issues/43898#issuecomment-2482313907
2025-01-06 17:00:03 +05:30
Manav Rathi
f7596c6cca to sx 2025-01-06 16:50:53 +05:30
Manav Rathi
b5cc2ed9d8 hstack 2025-01-06 16:45:38 +05:30
Neeraj Gupta
de885e45ef [mob] Hide join button is join is disabled 2025-01-06 16:32:19 +05:30
Manav Rathi
8f5cb7681e [web] Update React 18 => 19, Next 14 => 15, MUI 5 => 6 (#4609)
...and other libraries too.
2025-01-06 16:21:39 +05:30
Neeraj Gupta
d24c46610d Tweak padding 2025-01-06 16:18:07 +05:30
Manav Rathi
cbe46c4def Cleanup 2025-01-06 16:16:55 +05:30
Manav Rathi
1ea6b7fc8e Undo codemod litter 2025-01-06 16:14:55 +05:30
Manav Rathi
ada7550035 Remove dup 2025-01-06 16:11:09 +05:30
Manav Rathi
ba83c66ba6 Cleanup and dedup 2025-01-06 16:08:53 +05:30
Neeraj Gupta
fc10e46a0b [mob] Allow joining public links 2025-01-06 15:51:33 +05:30
Neeraj Gupta
928a7237a7 [mob] generated strings 2025-01-06 15:50:28 +05:30
Manav Rathi
64762b8810 v6 recommendation
https://mui.com/material-ui/migration/upgrade-to-v6/#box
2025-01-06 15:37:07 +05:30
Manav Rathi
742645fff4 Remove nested links 2025-01-06 15:33:09 +05:30
Manav Rathi
8589fbe97c Fix warning 2025-01-06 15:17:19 +05:30
Manav Rathi
5abbcd4228 Fix 2025-01-06 15:13:50 +05:30
Manav Rathi
43c464120f Fix type to match upstream update 2025-01-06 15:12:07 +05:30
Manav Rathi
61d89e01b8 Patch 2025-01-06 13:58:50 +05:30
Manav Rathi
0eb01f9cf4 Fix 2025-01-06 13:57:53 +05:30
Manav Rathi
5e3323275d Fix 2025-01-06 13:55:55 +05:30
Manav Rathi
1ca478af84 Fix 2025-01-06 13:53:48 +05:30
Manav Rathi
61ec736df8 Fix 2025-01-06 13:36:10 +05:30
Manav Rathi
fa9663dbf7 Fix 2025-01-06 13:31:31 +05:30
Manav Rathi
32a47b4020 Fix 2025-01-06 13:28:10 +05:30
Manav Rathi
9544ffee9a cast 2025-01-06 13:21:44 +05:30
Manav Rathi
79c2ad89c5 auth 2025-01-06 13:20:52 +05:30
Manav Rathi
7b45d0aa9e Update 2025-01-06 13:17:08 +05:30
Neeraj Gupta
8c3fff8015 Merge branch 'join_change' of https://github.com/ente-io/auth into join_change 2025-01-06 13:15:47 +05:30
Neeraj Gupta
79e059ccc2 [mob] Remove hardcoded urls for public collection 2025-01-06 13:15:09 +05:30
Manav Rathi
4a47305a54 Fix + accounts app 2025-01-06 13:12:03 +05:30
Manav Rathi
9c6f0b7ee6 Fix 2025-01-06 12:59:44 +05:30
Manav Rathi
670a75048e codemods + manual 2025-01-06 12:50:44 +05:30
mangesh
180f7d842b [server] Email Notification on User Login. (#4586)
# Description 

- Add functionality for sending Email Notification on Login to User's
Ente Account.
2025-01-06 12:43:23 +05:30
mngshm
2b97899562 fix: remove duplicate declaration of FilesCollectedMuteDurationInMinutes 2025-01-06 12:25:22 +05:30
mngshm
af4229d551 resolve merge conflicts 2025-01-06 12:20:43 +05:30
Manav Rathi
ac10ce7bff Restore color 2025-01-06 12:07:42 +05:30
mngshm
7c21f9ddb2 fix: bad formatting 2025-01-06 12:02:20 +05:30
Manav Rathi
1999ce4aaa Future-compat styled 2025-01-06 12:01:10 +05:30
Neeraj Gupta
d17dbe4115 Remove hardcoded endpoint 2025-01-06 11:59:55 +05:30
Neeraj Gupta
c38947c14c [mob] Add method to join public collection 2025-01-06 11:59:37 +05:30
Neeraj Gupta
6a01cda379 Merge remote-tracking branch 'origin/main' into join_change 2025-01-06 11:58:03 +05:30
mngshm
f1d8b022f7 fix: lint 2025-01-06 11:53:46 +05:30
Manav Rathi
859bf63685 codemods + manual 2025-01-06 11:51:52 +05:30
Manav Rathi
5752463360 Pin to 5.6 until the ArrayBufferLike regressions are resolved
e.g. https://github.com/microsoft/TypeScript/issues/60846, https://github.com/microsoft/TypeScript/issues/60579

Note that we can't also update the node types since we're using node 20.
2025-01-06 11:48:41 +05:30
Manav Rathi
2b14f9150f esl 2025-01-06 11:42:17 +05:30
Manav Rathi
3aa3ab37c2 fmt 2025-01-06 11:39:41 +05:30
mngshm
f34624e0d2 fix lint (?) 2025-01-06 11:39:36 +05:30
Manav Rathi
e569a25f87 Avoid recreating the style everytime
https://mui.com/system/getting-started/the-sx-prop/#dynamic-values
2025-01-06 11:35:17 +05:30
Neeraj Gupta
be7f4b7107 [auth] add padding to the generated QR code image to prevent coner ey… (#4591)
## Description
Some QR codes (especially those with smaller data) had their corner
alignment patterns (the three large squares) partially cut off, reducing
readability and making them potentially invalid for scanning.

Added padding (**20.0** on each side) around the QR code to ensure that
corner alignment patterns are never cut off.


![image](https://github.com/user-attachments/assets/bb769862-e882-436f-8dbf-58642e1221b5)
2025-01-06 11:34:05 +05:30
Neeraj Gupta
e4b7089d5e [mobile] New translations (#4604)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2025-01-06 11:33:28 +05:30
Neeraj Gupta
3172bc613c Request feedback on subscription cancellation (#4590) 2025-01-06 11:31:23 +05:30
Neeraj Gupta
4d5b44a4c1 Make linter happy 2025-01-06 11:29:02 +05:30
Neeraj Gupta
afe7705355 Improve canJoin check for public link 2025-01-06 11:27:54 +05:30
Neeraj Gupta
52c0bcb6cf [server] Allow client to update enableJoin flag 2025-01-06 11:27:45 +05:30
Neeraj Gupta
d4b36cb698 [server] Allow client to pass join flag 2025-01-06 11:27:37 +05:30
Neeraj Gupta
e74d705446 [server] API to enable joining collection via link 2025-01-06 11:27:22 +05:30
Manav Rathi
f13b80be1d Minor 2025-01-06 11:22:50 +05:30
Manav Rathi
b94332aaa7 codemods + manual afterwords
npx @mui/codemod@latest deprecations/all `git ls-files '**.tsx'` ; npx @mui/codemod@latest v6.0.0/styled `git ls-files '**.tsx'` ; npx @mui/codemod@latest v6.0.0/sx-prop `git ls-files '**.tsx'` ; npx @mui/codemod@latest v6.0.0/system-props `git ls-files '**.tsx'`
2025-01-06 11:19:13 +05:30
Neeraj Gupta
220d4eb4a6 [auth] Add Newgrounds icon (#4600)
## Description
Adds custom SVG icon for https://www.newgrounds.com/.
2025-01-06 11:11:42 +05:30
Neeraj Gupta
f8b17f52d5 Add Custom Icon for PostScan Mail (#4593)
https://postscanmail.com
2025-01-06 11:08:26 +05:30
Neeraj Gupta
4d6d5a0037 [auth] New translations (#4605)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2025-01-06 11:08:09 +05:30
Manav Rathi
4ce934a0f9 Manual cleanup after npx @mui/codemod@latest v6.0.0/system-props
git ls-files '**.tsx' | xargs -n 1 npx @mui/codemod@latest v6.0.0/system-props
2025-01-06 11:07:10 +05:30
Manav Rathi
69d0893c43 @/accounts - codemods then manual fixing
npx @mui/codemod@latest deprecations/all `git ls-files '**.tsx'` && npx @mui/codemod@latest v6.0.0/styled `git ls-files '**.tsx'` && npx @mui/codemod@latest v6.0.0/sx-prop `git ls-files '**.tsx'`
2025-01-06 10:53:30 +05:30
Manav Rathi
e210b22efd npx @mui/codemod@latest v6.0.0/system-props photo/src then cleanup 2025-01-06 10:23:42 +05:30
Manav Rathi
084fb5bbed npx @mui/codemod@latest v6.0.0/sx-prop src 2025-01-06 10:23:42 +05:30
Manav Rathi
7510be7453 Fix dep 2025-01-06 10:23:42 +05:30
Manav Rathi
9790148ba9 Fix 2025-01-06 10:23:42 +05:30
Manav Rathi
cf93f80c0c MutableRefObject is deprecated (all refs are mutable now) 2025-01-06 10:23:41 +05:30
Manav Rathi
b5418ea2e4 Vis center 2025-01-06 10:23:41 +05:30
Manav Rathi
c65a34e180 Better layout around the breakpoint 2025-01-06 10:23:41 +05:30
Manav Rathi
d427374e99 Prune 2025-01-06 10:23:41 +05:30
Manav Rathi
72ddc812bd Clean up 2025-01-06 10:23:41 +05:30
Manav Rathi
d0ab487f31 Add workaround for Chrome smooth scroll bug by doing it twice
Ref: https://github.com/facebook/react/issues/23396
2025-01-06 10:23:41 +05:30
Manav Rathi
a5156db967 Smooth scroll doesn't work with Chrome 2025-01-06 10:23:41 +05:30
Manav Rathi
a44a3183d3 Test 2 2025-01-06 10:23:41 +05:30
Manav Rathi
5af93fbbcb Testing smooth anim 2025-01-06 10:23:41 +05:30
Manav Rathi
438f4e6f50 Simplify 2025-01-06 10:23:41 +05:30
Manav Rathi
53ff75bff6 Fixes 2025-01-06 10:23:41 +05:30
Manav Rathi
83432f2a7c Dots 2025-01-06 10:23:41 +05:30
Manav Rathi
c1d0f9445d Custom carousel wip 2025-01-06 10:23:41 +05:30
Manav Rathi
b43b2410e9 Carousel migration to fix Next 15 issues 2025-01-06 10:23:41 +05:30
Manav Rathi
3e4ca320c9 Fix prop-types dep 2025-01-06 10:23:41 +05:30
Manav Rathi
ef482c4b49 Fix 2025-01-06 10:23:41 +05:30
Manav Rathi
3bea29f83b peer-deps 2025-01-06 10:23:41 +05:30
Manav Rathi
9295b15cd8 Regen 2025-01-06 10:23:41 +05:30
Manav Rathi
3ba62669df exifreader
https://github.com/mattiasw/ExifReader/releases
2025-01-06 10:23:41 +05:30
Manav Rathi
b59e97cb6c checkpoint 2025-01-06 10:23:41 +05:30
Manav Rathi
b6fa5c5b44 checkpoint 2025-01-06 10:23:41 +05:30
Manav Rathi
c52a62d944 Update React 18 => 19, Next 14 => 15, MUI 5 => 6 (wip checkpoint) 2025-01-06 10:23:41 +05:30
Manav Rathi
8d1a800cf4 [web] New translations (#4602)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-01-06 09:57:08 +05:30
Crowdin Bot
83cfd470d0 New Crowdin translations by GitHub Action 2025-01-06 01:17:27 +00:00
Crowdin Bot
4e46d8da42 New Crowdin translations by GitHub Action 2025-01-06 01:05:15 +00:00
Crowdin Bot
7e298b8d1d New Crowdin translations by GitHub Action 2025-01-06 00:35:59 +00:00
NRM
35fb4e8d58 Add Newgrounds entry. 2025-01-05 22:54:17 +00:00
NRM
637eabaae2 Add Newgrounds icon. 2025-01-05 22:50:19 +00:00
Prateek Sunal
7a39b6c75c [auth] Fix ~/.cache being deleted on linux (#4597)
## Description

Fixes https://github.com/ente-io/ente/issues/4536 and
https://github.com/ente-io/ente/issues/4464.

## Tests

After opening the app on linux, my 1.3G cache folder remained intact.

## Technical details

Now the path resolves to `~/.cache/io.ente.auth` instead of `~/.cache`.
[Under the
hood](ca4671cc0f/packages/path_provider/path_provider_linux/lib/src/path_provider_linux.dart (L75-L82))
it uses the app's ID and the `xdg_directories` package, so it will work
when the user has `XDG_CACHE_HOME` set to something else.
2025-01-06 00:44:14 +05:30
Prateek Sunal
d07f6f8ee1 fix: set correct cache directory for all platforms 2025-01-06 00:25:28 +05:30
Gutyina Gergő
b5d4b848fd [auth] Fix ~/.cache being deleted on linux 2025-01-05 18:49:39 +01:00
NanoBunTV
44f7872707 Add custom icon for PostScan Mail 2025-01-04 17:07:51 -06:00
Aman Raj
b33e4ea977 [auth] add padding to the generated QR code image to prevent coner eye from being cut off 2025-01-04 18:37:59 +05:30
vishnukvmd
a11ea3b41b Update template 2025-01-04 17:16:05 +05:30
vishnukvmd
f967b6b00e Request feedback on paid sub cancellation 2025-01-04 17:05:07 +05:30
mngshm
6a3ef27408 chore: set universal timezone 2025-01-04 15:48:05 +05:30
Ashil
446556967d [mob][photos] Bump up to v0.9.75 (#4585) 2025-01-03 18:28:35 +05:30
mngshm
cf56776245 add formatting to time and change email subject 2025-01-03 17:11:58 +05:30
ashilkn
ec3213040c [mob][photos] Bump up to v0.9.75 2025-01-03 17:10:37 +05:30
mngshm
a0d2573a04 chore: minor changes in email template 2025-01-03 17:10:37 +05:30
vishnukvmd
afd8d4caac Fix case 2025-01-03 16:52:12 +05:30
Ashil
dc494c02c4 [mob][photos] Option to hide shared items from home gallery (#4582)
## Description



https://github.com/user-attachments/assets/ce79a175-3683-423c-af35-f40a834dfec7
2025-01-03 16:50:19 +05:30
ashilkn
333a71a4a1 [mob][photos] Add close button that takes user from PhotoGridSizePickerPage to home gallery 2025-01-03 16:45:03 +05:30
ashilkn
05f80f2bdd [mob][photos] Extract string 2025-01-03 16:40:41 +05:30
ashilkn
f82e48e754 [mob][photos] Create different screen for gallery settings. Can be found in Settings -> Advanced -> Gallery 2025-01-03 16:39:22 +05:30
ashilkn
cbf2947b0f [mob][photos] Remove unnecessary Column widgets 2025-01-03 16:22:11 +05:30
mngshm
a052342ec4 add: formatting to time.Now() 2025-01-03 15:46:44 +05:30
Neeraj Gupta
913baf994a [server] Fix login notificaiton 2025-01-03 15:12:20 +05:30
mngshm
e6171dbec4 test: login success 2025-01-03 14:59:16 +05:30
Neeraj Gupta
1952e5278d [auth] Fix key binding for search focus on mac (#4584)
## Description

## Tests
2025-01-03 14:49:43 +05:30
Neeraj Gupta
c5019da4bd [auth] Bump version v4.2.3 2025-01-03 14:42:04 +05:30
Neeraj Gupta
acb898ecf9 [auth] Activate search on cmd+f on mac instead of ctrl+f 2025-01-03 14:41:37 +05:30
mangesh
aea531ee21 [docs] Update self-hosting docs for configurable app urls (#4565) 2025-01-03 14:27:37 +05:30
Neeraj Gupta
22c4a50c2b [auth] Dragable scrollbar for long scrolling list of codes (#4583) 2025-01-03 12:53:42 +05:30
ashilkn
4609d395c7 [mob][photos] Extract string 2025-01-03 12:22:40 +05:30
ashilkn
8296c81742 [mob][photos] Make same changes to getAllLocalAndUploadedFiles 2025-01-03 12:20:00 +05:30
mngshm
290716e8ca minor fix after testing on build 2025-01-03 11:57:43 +05:30
ashilkn
a1afd8155c [mob][photos] Add a new parameter 'ignoreSharedFiles' and use that instead of passing 'applyOwnerCheck' since apply owner check doesn't exclude files for which ownerID is null 2025-01-03 11:57:05 +05:30
Ashil
f96a336b4b [mob][photos] Add android build folder in gitignore (#4576) 2025-01-03 11:54:42 +05:30
Aman Raj
a6600b4718 [auth] added scrollbar for custom sorting of codes 2025-01-03 00:12:00 +05:30
ashilkn
232f793fb0 [mob][photos] Add logic to reload home gallery on toggling hide shared items from home gallery settings and also store the preference in local settings 2025-01-02 23:41:40 +05:30
Aman Raj
ce0798fbec [auth] Dragable scrollbar for selecting custom icons 2025-01-02 23:29:54 +05:30
Ashil
7cbc5ffb2d [mob][photos] Fix minor UX issue move/add to a newly created album (#4575)
## Description

When adding/moving items to a newly created album from the vertical
albums list sheet, after items are added, the app fails to navigate to
the newly created album. This PR fixes this issue.
2025-01-02 23:00:38 +05:30
ashilkn
88ac10d96c [mob][photos] Add android build folder in gitignore 2025-01-02 22:56:52 +05:30
ashilkn
0a7fd03df7 [mob][photos] Fix move/add to album UX issue 2025-01-02 22:48:52 +05:30
Manav Rathi
9b47595f2c [web] Video preview - Prep - Part x/x (#4572) 2025-01-02 17:25:05 +05:30
Manav Rathi
af5e072ea5 Prune 2025-01-02 16:39:38 +05:30
Manav Rathi
2bc9251a09 Specific 2025-01-02 16:36:52 +05:30
Aman Raj Singh Mourya
12a19a484c [auth] Export Code Lockscreen fix (#4571)
https://github.com/user-attachments/assets/3f6d3726-d333-4dc3-ba67-3c100d00d93f
2025-01-02 16:35:14 +05:30
Manav Rathi
8906cb2a1d Agenda 2025-01-02 16:29:41 +05:30
Manav Rathi
6f936a42c4 Unused 2025-01-02 16:23:58 +05:30
Manav Rathi
497e546129 Doc 2025-01-02 16:22:14 +05:30
Manav Rathi
2736ab5334 Tweak 2025-01-02 16:15:40 +05:30
Manav Rathi
f04b8ffce6 Move 2025-01-02 16:11:23 +05:30
Manav Rathi
b7f33233d9 R 2025-01-02 16:05:35 +05:30
Manav Rathi
6dffb1f289 Conv 2025-01-02 15:59:26 +05:30
Manav Rathi
5a131e7f83 Conv 2025-01-02 15:44:15 +05:30
Manav Rathi
2138ef602a Inline 2025-01-02 15:43:42 +05:30
Manav Rathi
6adadcaf93 Inline 2025-01-02 15:34:56 +05:30
Manav Rathi
0ce4ed494d Inline 2025-01-02 15:31:36 +05:30
Manav Rathi
77257aa6ab T 2025-01-02 15:27:04 +05:30
Manav Rathi
184bb6ec6c Tweak 2025-01-02 15:23:42 +05:30
Manav Rathi
2e7e9c1ca8 Reorder 2025-01-02 15:14:52 +05:30
Manav Rathi
7ef3a7a726 Doc 2025-01-02 15:12:44 +05:30
Manav Rathi
fbf27b4544 Reduce state 2025-01-02 14:51:02 +05:30
Manav Rathi
67ba7614db Flip 2025-01-02 14:33:26 +05:30
Manav Rathi
b05e675820 Tweaks 2025-01-02 14:14:25 +05:30
Manav Rathi
ff3033f1ae Reclaim preview 2025-01-02 13:57:47 +05:30
Manav Rathi
4dda92219a Tie 2025-01-02 13:31:58 +05:30
Manav Rathi
53618d0e1f preview 1 2025-01-02 13:14:15 +05:30
Manav Rathi
0642e41a2e [web] Improve handling of in-memory favorite state until sync completes (#4570) 2025-01-02 13:07:05 +05:30
Manav Rathi
0be4aed185 Other 2025-01-02 13:03:35 +05:30
Neeraj Gupta
ef93482523 [auth] Ctrl+F to activate search tab (#4552) 2025-01-02 12:43:32 +05:30
Manav Rathi
bb161ad3a9 Rew 2025-01-02 12:42:01 +05:30
Manav Rathi
bf7be69c3d Fix 2025-01-02 12:30:52 +05:30
Manav Rathi
82358812bd Combine 2025-01-02 12:28:52 +05:30
Manav Rathi
e52e61c0af ft 2025-01-02 12:22:17 +05:30
Manav Rathi
17ea9dfaaa thread 2025-01-02 12:15:26 +05:30
Manav Rathi
6e045affa4 Rename 2025-01-02 11:53:01 +05:30
Manav Rathi
1232b956c9 Keep fav file overrides in reducer 2025-01-02 11:40:35 +05:30
mngshm
9a284f916f adapt docs to PR#4562 2025-01-01 19:06:44 +05:30
Aman Raj
df321f9dea [auth] fix: remove extra setstate 2025-01-01 17:57:21 +05:30
Neeraj Gupta
543411254b [auth] Fix progress bar (#4564)
## Description

## Tests
2025-01-01 17:04:35 +05:30
Neeraj Gupta
a3b9b6bb90 [mob] Add authentication for trashed section (#4561)
## Description

## Tests
2025-01-01 17:04:24 +05:30
Manav Rathi
5b9e1abec3 [web] Remove hardcoded URLs (#4562)
Museum now supports configuring the URL that the clients should use for
cast, accounts (passkeys) and families portal.

Changes are in main, and also the latest published Docker image.

If you're using the old method (which was only supported by the web app,
unlike the new method which is supported by both mobile and web) of
configuring the custom environment variables, then you should instead
use the corresponding setting in the museum configuration.

```
NEXT_PUBLIC_ENTE_ACCOUNTS_URL => apps.account
NEXT_PUBLIC_ENTE_FAMILY_URL => apps.family
```

Reference: [apps block in
local.yaml](fe2771f2e0/server/configurations/local.yaml (L75-L89))
2025-01-01 16:38:23 +05:30
Neeraj Gupta
a1e97239c3 [server] Skip sending ott during signup when registrations are disabled (#4563)
## Description

## Tests
2025-01-01 14:39:00 +05:30
Manav Rathi
2f372cdbe1 Doesn't work outside of the next process 2025-01-01 14:19:12 +05:30
Manav Rathi
9910049d1d [web] Remove hardcoded URLs
Museum now supports configuring the URL that the clients should use for cast,
accounts (passkeys) and families portal.

If you're using the old method (which was only supported by the web app, unlike
the new method which is supported by both mobile and web, and also for cast) of
configuring the custom environment variables, then you should instead use the
corresponding setting in the museum configuration:

- NEXT_PUBLIC_ENTE_ACCOUNTS_URL => apps.account
- NEXT_PUBLIC_ENTE_FAMILY_URL => apps.family

Reference: [apps block in
local.yaml](fe2771f2e0/server/configurations/local.yaml (L75-L89))
2025-01-01 14:12:38 +05:30
github-actions[bot]
fe2771f2e0 [auth] New translations (#4539)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-01-01 13:47:54 +05:30
Rui Chen
2e517535b3 [cli] Switch to go v1.23 (#4556)
## Description

feat: update to use go1.23

---

relates to https://github.com/Homebrew/homebrew-core/pull/201919
(homebrew side always use latest go for building the artifact)

also love a new cli release for some patches so that we can proceed with
the homebrew PR

Signed-off-by: Rui Chen <rui@chenrui.dev>
2025-01-01 13:47:39 +05:30
Alan Moyano
e459fb5686 [auth] Adding icon for Belo (#4548)
## Description
Belo is a popular fintech in Argentina and Brazil.
2025-01-01 13:46:12 +05:30
Neeraj Gupta
9498571c10 [auth] Update Amazon icon (#4554)
## Description

- Update Amazon icon to comply with new branding.
2025-01-01 13:44:16 +05:30
Neeraj Gupta
f2a9675911 [server] Speed up deletion (#4560)
## Description

## Tests
2025-01-01 13:42:04 +05:30
Neeraj Gupta
ede505d939 [server] Speed up deletion 2025-01-01 13:40:48 +05:30
Manav Rathi
65a92f1a77 [web] Remove unnecessary queuing primitive for non-async function (#4558)
The useEffect that underlay useMemoSingleThreaded shouldn't be having
any impact none of this code has an async dispatch, and all of it
already runs serially on the main thread.
2025-01-01 10:14:28 +05:30
Manav Rathi
56cdb9064d [web] Remove unnecessary queuing primitive for non-async function
The useEffect that underlay useMemoSingleThreaded shouldn't be having any impact
none of this code has an async dispatch, and all of it already runs serially on
the main thread.
2025-01-01 10:08:48 +05:30
Tanguy
7ddf70eb86 Update Amazon icon to new branding 2024-12-31 15:31:44 +01:00
Aman Raj
6592ddedfd [auth] fix: disposing text controller 2024-12-31 15:53:02 +05:30
Aman Raj
1b74049eb5 [auth] ctrl+f to activate search box for icons 2024-12-31 15:52:13 +05:30
Aman Raj
568377d4e7 [auth] ctrl+f to activate search box 2024-12-31 15:51:43 +05:30
Vishnu Mohandas
4bd416fd10 [auth] add caixa icon (#4551)
Solves [issue](https://github.com/ente-io/ente/issues/4531)
2024-12-31 15:47:10 +05:30
Aman Raj
634ae71a5d [auth] add caixa icon 2024-12-31 15:10:28 +05:30
Neeraj Gupta
0ae1557508 [mobile] New translations (#4538)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-12-31 02:03:31 +05:30
Manav Rathi
93071af19a [server] Add workaround for intermittent Safari CORS errors (#4540)
At times, Safari will fail our API responses because its CORS preflight
fails. The errors are reproducible, but intermittently, and not on
localhost. We seem not to be the first ones to hit
[this](https://github.com/processing/p5.js-web-editor/issues/3156).

Based on a hint from:


https://github.com/supabase/supabase/issues/20982#issuecomment-2548329565

Modify our CORS responses to use 200 instead of 204 to try and fix
Safari.
2024-12-30 18:54:31 +05:30
Manav Rathi
ab15263a17 [web] Use urls from museum response instead of hardcoded ones (#4546)
Next step will be to remove the hardcoded ones completely (this is
pending on a new museum image release).
2024-12-30 17:26:28 +05:30
Manav Rathi
d2d02f3591 lf 2024-12-30 17:18:51 +05:30
Manav Rathi
1e79409f73 fam 2024-12-30 16:54:56 +05:30
Manav Rathi
866d2bb00a Use 2024-12-30 16:51:10 +05:30
Manav Rathi
1832005d72 Use 2024-12-30 16:46:51 +05:30
Manav Rathi
b054c070ad Parse 2024-12-30 16:45:14 +05:30
Manav Rathi
64a47694d0 Type 2024-12-30 16:37:05 +05:30
Aman Raj
8af02aa4c8 [auth] fix dialog not hiding after saving the codes/logs 2024-12-30 16:20:13 +05:30
Manav Rathi
a4e09a40e8 Doc 2024-12-30 16:19:10 +05:30
Manav Rathi
82fc1a1434 Opt 2024-12-30 16:15:33 +05:30
Manav Rathi
b511aeb401 zod type 2024-12-30 16:01:28 +05:30
Manav Rathi
6812527607 Use accounts url 2024-12-30 15:44:34 +05:30
Manav Rathi
2263eb684c Use 2024-12-30 15:44:34 +05:30
Manav Rathi
8df68cf529 Parse cast URL 2024-12-30 15:44:34 +05:30
Manav Rathi
ba11a5a755 [desktop] Prettier upgrade (#4545)
And then some.

Sibling of https://github.com/ente-io/ente/pull/4542
2024-12-30 15:42:58 +05:30
Manav Rathi
e31b55499b Upd 2024-12-30 15:37:38 +05:30
Manav Rathi
89f917220d Fix 2024-12-30 15:34:56 +05:30
Manav Rathi
fad26a960d Elsewhere 2024-12-30 14:55:44 +05:30
Manav Rathi
6e3d285428 Manually run in code too 2024-12-30 14:54:13 +05:30
Manav Rathi
2198eeb372 Prettier upgraed 2024-12-30 14:53:37 +05:30
Manav Rathi
184c044377 [docs] Prettier and vitepress update (#4543)
Run `yarn pretty` afterwords.

Sibling of https://github.com/ente-io/ente/pull/4542
2024-12-30 14:51:32 +05:30
Manav Rathi
63d41434a9 yarn pretty 2024-12-30 14:47:46 +05:30
Manav Rathi
310f180c5a Update prettier and vitepress 2024-12-30 14:45:10 +05:30
Manav Rathi
5da05467d6 Elsewhere 2024-12-30 14:45:10 +05:30
Manav Rathi
a2decb5030 Workers 2024-12-30 14:45:10 +05:30
Manav Rathi
6f891a45de [web] Prettier upgrade (#4542)
The list formatting changed (again).
2024-12-30 14:31:45 +05:30
Manav Rathi
4e7d764722 numered lists too 2024-12-30 14:23:48 +05:30
Manav Rathi
9aae713207 Update comments to match prettier defaults
These comments were earlier written to match the way prettier formatted
markdown, but they've changed that upstream with 3.4, so revert back to the more
natural style that prettier also uses.
2024-12-30 14:18:36 +05:30
Manav Rathi
17aa1b67c1 [web] Prettier upgrade 2024-12-30 14:10:54 +05:30
Manav Rathi
5e22c95bfb [server] Retain published image commit as branch instead of tag (#4541)
Overwriting tags is clunky (besides being generally discouraged). e.g.
pulling the overwritten tags locally requires `git fetch --force
--tags`. So instead use the branch `server/ghcr` to point to the commit
from which the latest published ghcr docker image has been built.
2024-12-30 14:03:41 +05:30
Manav Rathi
182fd89356 [server] Retain published image commit as branch instead of tag
Overwriting tags is clunky (besides being generally discouraged). e.g. pulling
the overwritten tags locally requires `git fetch --force --tags`. So instead use
the branch `server/ghcr` to point to the commit from which the latest published
ghcr docker image has been built
2024-12-30 13:58:08 +05:30
Manav Rathi
6516b457cb [server] Add workaround for intermittent Safari CORS errors
At times, Safari will fail our API responses because its CORS preflight fails.
The errors are reproducible, but intermittently, and not on localhost.  We seem
not to be the first ones to hit [this](https://github.com/processing/p5.js-web-editor/issues/3156).

Based on a hint from:

https://github.com/supabase/supabase/issues/20982#issuecomment-2548329565

Modify our CORS responses to use 200 instead of 204 to try and fix Safari.
2024-12-30 12:13:53 +05:30
Manav Rathi
bf78b2e671 [web] New translations (#4537)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-12-30 09:50:40 +05:30
Crowdin Bot
58afaa9405 New Crowdin translations by GitHub Action 2024-12-30 04:18:26 +00:00
Crowdin Bot
1bffbdad03 New Crowdin translations by GitHub Action 2024-12-30 01:05:17 +00:00
Manav Rathi
267d5cef65 [web] Fix typo in (report only) CSP policy (#4525) 2024-12-27 19:55:52 +05:30
Manav Rathi
d391db2dd5 [web] Fix typo in (report only) CSP policy 2024-12-27 19:52:30 +05:30
Aman Raj
548b4e7a08 [auth] implemented import code from images having qr_code 2024-12-21 10:28:02 +05:30
Aman Raj
37cbef01fe [auth] use scan package to scan qr from images 2024-12-21 10:21:28 +05:30
535 changed files with 16803 additions and 13059 deletions

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 libcurl4-openssl-dev
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 libtiff6 xz-utils libarchive-tools libcurl4-openssl-dev
sudo updatedb --localpaths='/usr/lib/x86_64-linux-gnu'
- name: Install appimagetool

View File

@@ -45,7 +45,7 @@ jobs:
goarch: ${{ matrix.goarch }}
asset_name: ente-${{ github.ref_name }}-${{ matrix.goos }}-${{ matrix.goarch }}
release_name: ${{ github.ref_name }}
goversion: "1.20"
goversion: "1.23"
project_path: "./cli"
pre_command: export CGO_ENABLED=0
build_flags: "-trimpath"

View File

@@ -1,4 +1,4 @@
name: "Publish (server)"
name: "Publish ghcr (server)"
on:
# Run manually, providing it the commit.
@@ -39,7 +39,6 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Tag as server/ghcr
- name: Update branch server/ghcr to point to source commit
run: |
git tag -f server/ghcr
git push -f origin server/ghcr
git push -f origin HEAD:refs/heads/server/ghcr

1
auth/.gitignore vendored
View File

@@ -32,6 +32,7 @@
.pub-cache/
.pub/
/build/
macos/build/
# Web related
lib/generated_plugin_registrant.dart

View File

@@ -100,6 +100,16 @@ Photos](../mobile/README.md) or spreading the word.
For more ways to contribute, see [../CONTRIBUTING.md](../CONTRIBUTING.md).
## Certificate Fingerprints
- **SHA1**: 57:E8:C6:59:C3:AA:C9:38:B0:10:70:5E:90:85:BC:20:67:E6:8F:4B
- **SHA256**: BA:8B:F0:32:98:62:70:05:ED:DF:F6:B1:D6:0B:3B:FA:A1:4E:E8:BD:C7:61:4F:FB:3B:B1:1C:58:8D:9E:3A:D7
To verify these fingerprints, use the following command:
```bash
apksigner verify --print-certs <path_to_apk>
```
## ⭐️ About
To know more about Ente and the ways to get in touch or seek help, see [our main

View File

@@ -44,6 +44,17 @@
],
"hex": "fd4b2d"
},
{
"title": "AzurHosts",
"slug": "azurhosts",
"altNames": [
"minenode"
]
},
{
"title": "AzurWare",
"slug": "azuware"
},
{
"title": "BaiduCloud",
"slug": "baidu_cloud",
@@ -72,6 +83,9 @@
"NGA社区"
]
},
{
"title": "Belo"
},
{
"title": "Bethesda",
"altNames": [
@@ -175,6 +189,9 @@
{
"title": "Bybit"
},
{
"title": "Caixa"
},
{
"title": "Canva"
},
@@ -299,7 +316,7 @@
},
{
"title": "enom",
"slug": "enom_v1"
"slug": "enom"
},
{
"title": "Epic Games",
@@ -312,6 +329,10 @@
{
"title": "Estateguru"
},
{
"title": "Fastmail",
"hex": "0067B9"
},
{
"title": "Fidelity",
"slug": "fidelity",
@@ -612,6 +633,10 @@
{
"title": "NextDNS"
},
{
"title": "Newgrounds",
"slug": "newgrounds"
},
{
"title": "Newton",
"altNames": [
@@ -713,6 +738,14 @@
{
"title": "PostNL"
},
{
"title": "PostScan Mail",
"slug": "postscanmail",
"altNames": [
"Post Scan Mail",
"PostScanMail"
]
},
{
"title": "Privacy Guides",
"slug": "privacyguides"
@@ -1046,4 +1079,4 @@
]
}
]
}
}

View File

@@ -1,6 +1,10 @@
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M442.375 441.562C390.672 479.687 315.75 500 251.25 500C160.625 500 79.344 466.562 17.7346 410.89C13.0471 406.515 17.2346 400.547 23.0471 403.953C89.5315 442.656 171.875 465.937 256.656 465.937C317.884 465.655 378.451 453.272 434.875 429.5C443.625 425.781 450.969 435.218 442.375 441.562ZM463.875 416.968C457.313 408.531 420.188 412.984 403.563 414.937C398.485 415.562 397.719 411.14 402.281 407.968C431.969 387.187 480.313 393.172 485.969 400.156C491.625 407.14 484.5 455.781 456.75 478.968C452.485 482.531 448.422 480.64 450.5 475.906C456.75 460.343 470.719 425.437 464.094 416.968" fill="#FF9900"/>
<g style="mix-blend-mode:difference">
<path fill-rule="evenodd" clip-rule="evenodd" d="M287.969 216.625C287.969 243.063 288.641 265.109 275.281 288.578C264.344 307.641 247.156 319.406 228.328 319.406C202.281 319.406 187.016 299.563 187.016 270.266C187.016 212.453 238.828 201.938 287.984 201.938L287.969 216.625ZM356.422 382C351.938 386.016 345.453 386.297 340.391 383.625C317.891 364.922 313.766 356.234 301.453 338.391C264.234 376.359 237.797 387.719 189.609 387.719C132.453 387.719 88.0781 352.5 88.0781 281.984C88.0781 226.922 117.844 189.422 160.422 171.094C197.25 154.875 248.703 152.031 288 147.656V139.062C288 122.938 289.25 103.844 279.719 89.9219C271.516 77.4219 255.656 72.2656 241.641 72.2656C215.781 72.2656 192.781 85.5469 187.156 113.016C186.016 119.266 181.531 125.141 175.328 125.422L109.375 118.047C103.844 116.797 97.6563 112.328 99.2656 103.984C114.5 24.0625 186.641 0 251.156 0C284.172 0 327.313 8.78125 353.344 33.7812C386.359 64.6094 383.219 105.734 383.219 150.5V256.25C383.219 288.031 396.391 301.953 408.797 319.141C413.094 325.391 414.047 332.578 408.516 337.172C391.003 351.98 373.669 366.997 356.516 382.219L356.422 382.031" fill="white"/>
</g>
</svg>
<svg width="500" height="500" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg">
<path d="M16.05 385.03C13.89 386.74 13.44 389.58 14.69 393.56C15.83 397.09 18.5 401.47 22.71 406.7C39.65 427.63 59.84 445.03 83.27 458.9C106.7 472.78 131.78 483.01 158.51 489.61C185.35 496.32 212.76 499.68 240.73 499.68C276.56 499.68 310.68 494.44 343.09 483.98C375.51 473.63 402.58 459.07 424.3 440.31C431.92 433.6 435.73 428.25 435.73 424.27C435.73 422.79 435.1 421.31 433.85 419.83C432.15 418.13 430.1 417.56 427.71 418.13C425.32 418.7 421.97 420.12 417.65 422.39C396.83 433.31 371.47 442.01 341.56 448.49C311.76 455.09 280.65 458.39 248.24 458.39C208.09 458.39 169.31 452.93 131.89 442.01C94.47 431.09 61.32 414.03 32.43 390.83C28.22 387.53 24.81 385.43 22.19 384.52C19.69 383.61 17.65 383.78 16.05 385.03Z"
fill="#FF6200"/>
<path d="M395.12 393.57C392.73 395.85 392.11 398.24 393.24 400.74C394.04 402.56 395.58 403.58 397.85 403.81C400.12 404.15 403.37 403.92 407.57 403.13C414.4 401.65 421.51 400.62 428.9 400.06C436.29 399.6 442.72 399.71 448.18 400.4C453.64 401.19 457.05 402.56 458.41 404.49C460.46 407.56 459.72 414.04 456.2 423.94C452.78 433.83 448.12 443.44 442.21 452.77C439.93 456.52 438.57 459.48 438.11 461.64C437.66 463.8 438.23 465.62 439.82 467.1C440.84 468.12 441.98 468.64 443.23 468.64C446.53 468.64 451.31 465.74 457.56 459.94C468.82 450.16 476.72 438.55 481.27 425.13C483.78 418.2 485.31 410.92 485.88 403.3C486.45 395.68 485.6 390.22 483.32 386.92C481.16 383.73 476.38 381.12 468.99 379.07C461.71 377.02 454.38 376 446.98 376C432.54 376 418.83 379.41 405.87 386.24C401.09 388.85 397.51 391.3 395.12 393.57Z"
fill="#FF6200"/>
<g style="mix-blend-mode:difference">
<path d="M209.76 387.72C188.61 387.72 170 383.1 153.92 373.87C137.84 364.34 125.33 351.24 116.4 334.56C107.47 317.59 103 298.09 103 276.05C103 249.55 109.55 226.32 122.65 206.37C136.05 186.42 154.96 171.08 179.38 160.36C204.1 149.64 232.98 144.28 266.04 144.28C281.23 144.28 293.58 145.32 303.11 147.41V138.03C303.11 115.39 298.94 98.57 290.61 87.55C282.27 76.23 269.61 70.58 252.64 70.58C225.24 70.58 207.67 85.02 199.93 113.9C197.55 122.24 192.63 125.82 185.19 124.62L124.44 113.9C119.97 113.01 116.85 111.08 115.06 108.1C113.57 105.12 113.42 101.1 114.61 96.04C122.36 65.66 138.74 42.14 163.75 25.46C189.06 8.49 220.78 0 258.89 0C304.16 0 338.55 12.21 362.08 36.63C385.9 61.05 397.81 96.63 397.81 143.39V368.07C397.81 371.34 396.62 374.17 394.24 376.55C392.15 378.64 389.47 379.68 386.2 379.68H328.13C320.98 379.68 316.51 375.81 314.73 368.07L305.79 326.08H302.22C294.18 345.73 282.12 360.92 266.04 371.64C250.26 382.36 231.49 387.72 209.76 387.72ZM200.38 265.33C200.38 281.11 204.4 293.77 212.44 303.3C220.78 312.53 231.94 317.14 245.94 317.14C264.4 317.14 278.55 308.95 288.37 292.58C298.2 275.9 303.11 252.08 303.11 221.11V197.43C294.78 195.94 286.88 195.2 279.44 195.2C255.02 195.2 235.66 201.6 221.37 214.41C207.37 226.91 200.38 243.89 200.38 265.33Z"
fill="white"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@@ -0,0 +1,42 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="537.000000pt" height="537.000000pt" viewBox="0 0 537.000000 537.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,537.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M2490 5364 c-19 -2 -78 -9 -130 -15 -219 -25 -457 -86 -675 -174
-349 -140 -623 -322 -896 -594 -432 -433 -683 -945 -770 -1571 -18 -125 -18
-525 0 -650 34 -245 91 -463 176 -675 140 -349 322 -623 594 -896 433 -432
945 -683 1571 -770 125 -18 525 -18 650 0 245 34 463 91 675 176 349 140 623
322 896 594 432 433 683 945 770 1571 8 56 14 189 14 325 0 297 -25 479 -102
745 -127 442 -351 819 -682 1151 -425 424 -928 675 -1535 765 -96 14 -481 27
-556 18z m-833 -1136 c25 -10 11 -13 -111 -24 -217 -20 -348 -69 -449 -169
-267 -262 -169 -752 266 -1335 81 -108 527 -564 658 -674 611 -507 1296 -850
1859 -932 157 -22 384 -15 490 16 207 60 338 192 380 380 21 95 21 96 32 76
16 -29 -10 -150 -50 -229 -50 -101 -125 -174 -235 -226 -541 -262 -1639 130
-2578 922 l-68 57 -189 0 -189 0 -38 -105 c-29 -82 -42 -106 -59 -110 -11 -3
-106 -4 -211 -3 l-190 3 1 25 c1 14 70 192 154 395 84 204 154 377 157 386 2
8 -33 71 -79 140 -151 226 -263 473 -303 666 -31 149 -18 312 36 431 73 167
253 280 492 311 95 13 193 12 224 -1z m278 -122 c378 -81 818 -271 1210 -524
229 -148 231 -173 3 -36 -378 227 -745 379 -1033 429 -132 23 -338 24 -422 2
-132 -35 -225 -105 -271 -205 -38 -82 -42 -209 -12 -335 24 -105 72 -233 85
-230 4 1 22 37 38 80 16 43 34 84 40 91 7 9 58 12 192 12 161 0 184 -2 197
-17 8 -10 115 -271 239 -580 123 -310 225 -556 227 -548 2 9 -37 183 -87 388
-50 204 -111 453 -135 552 -30 125 -41 184 -34 193 15 18 331 17 347 -1 6 -8
17 -45 25 -83 8 -38 44 -195 80 -349 35 -155 70 -311 76 -348 14 -77 30 -84
43 -16 5 24 51 202 103 396 52 193 94 358 94 366 0 39 26 47 163 47 73 0 138
-4 145 -8 10 -7 195 -680 226 -824 9 -39 23 -35 30 10 16 93 180 798 189 810
12 15 342 18 352 2 8 -12 -343 -1480 -357 -1498 -17 -20 -338 -13 -349 8 -6
12 -189 671 -217 783 -4 16 -11 28 -16 28 -6 0 -22 -46 -36 -103 -57 -223
-193 -704 -203 -716 -6 -8 -21 -10 -42 -6 -68 12 -40 -16 93 -94 384 -224 696
-354 995 -414 149 -30 391 -32 482 -4 171 52 254 145 274 310 3 28 11 50 16
49 17 -5 17 -147 0 -215 -98 -380 -560 -467 -1235 -233 -318 111 -643 280
-1012 527 -311 208 -551 413 -807 691 -184 200 -208 230 -311 392 -157 246
-241 427 -281 605 -65 293 43 516 295 607 141 51 387 54 601 9z"/>
<path d="M1750 2835 c-9 -24 -7 -33 16 -66 56 -81 69 -73 33 21 -27 72 -36 80
-49 45z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="87" height="87" fill="none"><rect width="86.1667" height="86.2257" fill="#5717D4" rx="14.7344"/><path fill="#00FFB2" fill-rule="evenodd" d="M24.448 35.976c.461-.504 1.242-.536 1.767-.098a26.25 26.25 0 0 0 16.867 6.09 26.25 26.25 0 0 0 16.867-6.09c.525-.438 1.306-.406 1.767.098l4.178 4.562a1.204 1.204 0 0 1-.092 1.732 34.9 34.9 0 0 1-22.72 8.36 34.9 34.9 0 0 1-22.72-8.36 1.204 1.204 0 0 1-.092-1.732z" clip-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 478 B

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="500px" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" xmlns:xlink="http://www.w3.org/1999/xlink">
<g><path style="opacity:0.99" fill="#0170ae" d="M 268.5,114.5 C 268.343,115.873 268.51,117.207 269,118.5C 291.11,156.392 312.943,194.392 334.5,232.5C 281.008,234.166 227.341,235.166 173.5,235.5C 135.941,171.393 98.6076,107.06 61.5,42.5C 116.5,41.1667 171.5,41.1667 226.5,42.5C 240.022,66.8911 254.022,90.8911 268.5,114.5 Z"/></g>
<g><path style="opacity:0.982" fill="#f5812a" d="M 499.5,43.5 C 499.5,44.5 499.5,45.5 499.5,46.5C 449.174,108.835 399.174,171.502 349.5,234.5C 345.217,235.492 340.884,235.826 336.5,235.5C 336.573,233.973 335.906,232.973 334.5,232.5C 312.943,194.392 291.11,156.392 269,118.5C 268.51,117.207 268.343,115.873 268.5,114.5C 286.953,90.8749 305.619,67.3749 324.5,44C 382.832,43.5 441.166,43.3333 499.5,43.5 Z"/></g>
<g><path style="opacity:0.561" fill="#337394" d="M 334.5,232.5 C 335.906,232.973 336.573,233.973 336.5,235.5C 282.167,235.5 227.833,235.5 173.5,235.5C 227.341,235.166 281.008,234.166 334.5,232.5 Z"/></g>
<g><path style="opacity:0.988" fill="#f5812a" d="M 325.5,264.5 C 322.22,267.043 319.387,270.043 317,273.5C 289.381,309.454 261.381,345.12 233,380.5C 231.121,382.527 229.954,384.86 229.5,387.5C 211.307,410.688 192.973,433.855 174.5,457C 116.168,457.5 57.8343,457.667 -0.5,457.5C -0.5,456.5 -0.5,455.5 -0.5,454.5C 50.0174,391.474 100.017,327.974 149.5,264C 208.335,263.168 267.001,263.335 325.5,264.5 Z"/></g>
<g><path style="opacity:0.99" fill="#0170ae" d="M 325.5,264.5 C 364.664,327.999 402.998,391.999 440.5,456.5C 383.829,456.833 327.163,456.5 270.5,455.5C 256.822,432.806 243.155,410.139 229.5,387.5C 229.954,384.86 231.121,382.527 233,380.5C 261.381,345.12 289.381,309.454 317,273.5C 319.387,270.043 322.22,267.043 325.5,264.5 Z"/></g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,70 @@
<?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"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 203.55556 203.55501"
version="1.1"
id="svg14"
sodipodi:docname="Fastmail_logo_2019.svg"
width="203.55556"
height="203.55501"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata20">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs18" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1136"
id="namedview16"
showgrid="false"
inkscape:zoom="0.55887135"
inkscape:cx="495.8288"
inkscape:cy="103.69084"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg14"
inkscape:document-rotation="0" />
<desc
id="desc2">Fastmail</desc>
<path
d="M 168.6788,57.190848 A 80.391313,80.391313 0 0 1 34.908803,146.39084 l -17.81,11.86 A 101.78194,101.78194 0 0 0 186.4788,45.340848 Z"
fill="#69b3e7"
id="path6" />
<path
d="M 21.158803,101.42084 A 80.39,80.39 0 0 1 168.6788,57.190848 l 17.8,-11.86 A 101.78471,101.78471 0 1 0 17.098803,158.25084 l 17.81,-11.86 a 80,80 0 0 1 -13.75,-44.97 z"
fill="#0067b9"
id="path8" />
<path
d="M 53.158803,133.68084 H 146.5288 a 3.41,3.41 0 0 0 3.41,-3.41 V 69.190848 Z"
fill="#333e48"
id="path10" />
<path
class="opacity"
d="M 101.5488,101.42084 53.158803,69.190848 v 64.519992 z"
fill="#ffc107"
id="path12" />
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 90 90" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="153.355%" id="a"><stop stop-color="#FF9D00" offset="0%"/><stop stop-color="#FF0B33" offset="100%"/></linearGradient></defs><path d="M31.81 8a9.088 9.088 0 0 1 9.088 9.088v62.125A3.787 3.787 0 0 1 37.11 83h-8.33a3.787 3.787 0 0 1-3.787-3.787V27.537a3.787 3.787 0 0 0-3.787-3.787h-1.515a3.787 3.787 0 0 0-3.786 3.787v51.676A3.787 3.787 0 0 1 12.118 83H3.787A3.787 3.787 0 0 1 0 79.213V11.787A3.787 3.787 0 0 1 3.787 8h28.022Zm49.102 0A9.088 9.088 0 0 1 90 17.088v15.633a3.03 3.03 0 0 1-3.03 3.029H76.368a3.03 3.03 0 0 1-3.029-3.03v-6.698a2.272 2.272 0 0 0-2.272-2.272H67.28a2.272 2.272 0 0 0-2.272 2.272v38.963c0 .837.678 1.515 1.515 1.515h6.059c.836 0 1.514-.678 1.514-1.515V57.5h-1.514a3.03 3.03 0 0 1-3.03-3.03v-9.69a3.03 3.03 0 0 1 3.03-3.03h14.39A3.03 3.03 0 0 1 90 44.78v29.132A9.088 9.088 0 0 1 80.912 83H58.19a9.088 9.088 0 0 1-9.089-9.088V17.088A9.088 9.088 0 0 1 58.191 8h22.72Z" fill="url(#a)" fill-rule="evenodd"/><style xmlns="" data-source="base" class="dblt-ykjmwcnxmi"/><style xmlns="" data-source="stylesheet-processor" class="dblt-ykjmwcnxmi"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -82,6 +82,8 @@ PODS:
- qr_code_scanner (0.2.0):
- Flutter
- MTBBarcodeScanner
- scan (0.0.1):
- Flutter
- SDWebImage (5.20.0):
- SDWebImage/Core (= 5.20.0)
- SDWebImage/Core (5.20.0)
@@ -144,6 +146,7 @@ DEPENDENCIES:
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- privacy_screen (from `.symlinks/plugins/privacy_screen/ios`)
- qr_code_scanner (from `.symlinks/plugins/qr_code_scanner/ios`)
- scan (from `.symlinks/plugins/scan/ios`)
- sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`)
- share_plus (from `.symlinks/plugins/share_plus/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
@@ -205,6 +208,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/privacy_screen/ios"
qr_code_scanner:
:path: ".symlinks/plugins/qr_code_scanner/ios"
scan:
:path: ".symlinks/plugins/scan/ios"
sentry_flutter:
:path: ".symlinks/plugins/sentry_flutter/ios"
share_plus:
@@ -245,6 +250,7 @@ SPEC CHECKSUMS:
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
privacy_screen: 1a131c052ceb3c3659934b003b0d397c2381a24e
qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e
scan: aea35bb4aa59ccc8839c576a18cd57c7d492cc86
SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8
Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57
sentry_flutter: 0eb93e5279eb41e2392212afe1ccd2fecb4f8cbe

View File

@@ -1,122 +1,38 @@
{
"images": [
"images" : [
{
"size": "20x20",
"idiom": "iphone",
"filename": "Icon-App-20x20@2x.png",
"scale": "2x"
"filename" : "Icon-App-1024x1024@1x.png",
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
},
{
"size": "20x20",
"idiom": "iphone",
"filename": "Icon-App-20x20@3x.png",
"scale": "3x"
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "Dark mode-1024@1x.png",
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
},
{
"size": "29x29",
"idiom": "iphone",
"filename": "Icon-App-29x29@1x.png",
"scale": "1x"
},
{
"size": "29x29",
"idiom": "iphone",
"filename": "Icon-App-29x29@2x.png",
"scale": "2x"
},
{
"size": "29x29",
"idiom": "iphone",
"filename": "Icon-App-29x29@3x.png",
"scale": "3x"
},
{
"size": "40x40",
"idiom": "iphone",
"filename": "Icon-App-40x40@2x.png",
"scale": "2x"
},
{
"size": "40x40",
"idiom": "iphone",
"filename": "Icon-App-40x40@3x.png",
"scale": "3x"
},
{
"size": "60x60",
"idiom": "iphone",
"filename": "Icon-App-60x60@2x.png",
"scale": "2x"
},
{
"size": "60x60",
"idiom": "iphone",
"filename": "Icon-App-60x60@3x.png",
"scale": "3x"
},
{
"size": "20x20",
"idiom": "ipad",
"filename": "Icon-App-20x20@1x.png",
"scale": "1x"
},
{
"size": "20x20",
"idiom": "ipad",
"filename": "Icon-App-20x20@2x.png",
"scale": "2x"
},
{
"size": "29x29",
"idiom": "ipad",
"filename": "Icon-App-29x29@1x.png",
"scale": "1x"
},
{
"size": "29x29",
"idiom": "ipad",
"filename": "Icon-App-29x29@2x.png",
"scale": "2x"
},
{
"size": "40x40",
"idiom": "ipad",
"filename": "Icon-App-40x40@1x.png",
"scale": "1x"
},
{
"size": "40x40",
"idiom": "ipad",
"filename": "Icon-App-40x40@2x.png",
"scale": "2x"
},
{
"size": "76x76",
"idiom": "ipad",
"filename": "Icon-App-76x76@1x.png",
"scale": "1x"
},
{
"size": "76x76",
"idiom": "ipad",
"filename": "Icon-App-76x76@2x.png",
"scale": "2x"
},
{
"size": "83.5x83.5",
"idiom": "ipad",
"filename": "Icon-App-83.5x83.5@2x.png",
"scale": "2x"
},
{
"size": "1024x1024",
"idiom": "ios-marketing",
"filename": "Icon-App-1024x1024@1x.png",
"scale": "1x"
"appearances" : [
{
"appearance" : "luminosity",
"value" : "tinted"
}
],
"filename" : "Tinted icon-1024@1x.png",
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
}
],
"info": {
"version": 1,
"author": "xcode"
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 773 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

View File

@@ -1,8 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
@@ -14,10 +17,17 @@
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" image="LaunchBackground" translatesAutoresizingMaskIntoConstraints="NO" id="tWc-Dq-wcI"/>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4"></imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" image="LaunchBackground" translatesAutoresizingMaskIntoConstraints="NO" id="tWc-Dq-wcI">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
</imageView>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="tintColor" systemColor="labelColor"/>
</imageView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
@@ -34,11 +44,14 @@
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
<point key="canvasLocation" x="80.916030534351137" y="264.08450704225356"/>
</scene>
</scenes>
<resources>
<image name="LaunchImage" width="1153" height="1153"/>
<image name="LaunchBackground" width="1" height="1"/>
<image name="LaunchImage" width="288" height="288"/>
<systemColor name="labelColor">
<color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>

View File

@@ -496,7 +496,7 @@ ElevatedButtonThemeData buildElevatedButtonThemeData({
fontFamily: 'Inter-SemiBold',
fontSize: 18,
),
padding: const EdgeInsets.symmetric(vertical: 18),
padding: const EdgeInsets.symmetric(vertical: 8),
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(4)),
),

View File

@@ -196,6 +196,7 @@
"scanAQrCode": "مسح رمز QR",
"enterDetailsManually": "أدخل التفاصيل يدوياً",
"edit": "تعديل",
"share": "مشاركة",
"copiedToClipboard": "تم النسخ إلى الحافظة",
"copiedNextToClipboard": "تم نسخ الرموز التالية إلى الحافظة",
"error": "خطأ",

View File

@@ -88,6 +88,8 @@
"useRecoveryKey": "Използвайте ключ за възстановяване",
"incorrectPasswordTitle": "Грешна парола",
"welcomeBack": "Добре дошли отново!",
"emailAlreadyRegistered": "Имейлът вече е регистриран.",
"emailNotRegistered": "Имейлът не е регистриран.",
"madeWithLoveAtPrefix": "направено с ❤️ от ",
"supportDevs": "Абонирайте се за <bold-green>ente</bold-green>, за да ни подкрепите",
"supportDiscount": "Използвайте промокод „AUTH“, за да получите 10% отстъпка през първата година",
@@ -258,6 +260,10 @@
"areYouSureYouWantToLogout": "Наистина ли искате да излезете от профила си?",
"yesLogout": "Да, излез",
"exit": "Изход",
"theme": "Тема",
"lightTheme": "Светла",
"darkTheme": "Тъмна",
"systemTheme": "Системна",
"verifyingRecoveryKey": "Проверка на ключа за възстановяване...",
"recoveryKeyVerified": "Ключът за възстановяване е проверен",
"recoveryKeySuccessBody": "Страхотно! Вашият ключ за възстановяване е валиден. Благодарим Ви за проверката.\n\nМоля, не забравяйте да запазите безопасно архивирания си ключ за възстановяване.",
@@ -490,5 +496,13 @@
"appLockNotEnabled": "Заключването на приложението не е активирано",
"appLockNotEnabledDescription": "Моля, активирайте заключването на приложението от Сигурност > Заключване на приложението",
"authToViewPasskey": "Моля, удостоверете се, за да видите Вашите ключове за парола",
"appLockOfflineModeWarning": "Избрахте да продължите без резервни копия. Ако забравите паролата на приложението си, ще бъдете заключени от достъп до вашите данни."
"appLockOfflineModeWarning": "Избрахте да продължите без резервни копия. Ако забравите паролата на приложението си, ще бъдете заключени от достъп до вашите данни.",
"duplicateCodes": "Повтарящи се кодове",
"noDuplicates": "✨ Няма дубликати",
"youveNoDuplicateCodesThatCanBeCleared": "Нямате повтарящи се кодове, които могат да бъдат изчистени",
"deduplicateCodes": "Премахване на повтарящи се кодове",
"deselectAll": "Демаркиране на всички",
"selectAll": "Избиране на всички",
"deleteDuplicates": "Изтриване на дубликатите",
"plainHTML": "Обикновен HTML"
}

View File

@@ -156,6 +156,7 @@
"twoFactorAuthTitle": "Autenticació de dos factors",
"passkeyAuthTitle": "Verificació per passkey",
"verifyPasskey": "Verifica la passkey",
"loginWithTOTP": "Inici de sessió amb TOTP",
"recoverAccount": "Recupera el compte",
"enterRecoveryKeyHint": "Introdueix la teva clau de recuperació",
"recover": "Recupera",
@@ -257,6 +258,10 @@
"areYouSureYouWantToLogout": "Segur que vols tancar la sessió?",
"yesLogout": "Sí, tanca la sessió",
"exit": "Surt",
"theme": "Tema",
"lightTheme": "Clar",
"darkTheme": "Fosc",
"systemTheme": "Del sistema",
"verifyingRecoveryKey": "Verificant clau de recuperació...",
"recoveryKeyVerified": "Clau de recuperació verificada",
"recoveryKeySuccessBody": "Perfecte! La teva clau de recuperació és vàlida. Gràcies per verificar-ho.\n\nSi us plau, recorda mantenir una còpia de seguretat de la teva clau de recuperació en un lloc segur.",
@@ -327,6 +332,10 @@
}
}
},
"manualSort": "Personalitzat",
"editOrder": "Edita l'ordre",
"mostFrequentlyUsed": "Usats sovint",
"mostRecentlyUsed": "Usats recentment",
"activeSessions": "Sessions actives",
"somethingWentWrongPleaseTryAgain": "S'ha produït un error, si us plau, intenta-ho de nou",
"thisWillLogYouOutOfThisDevice": "Això tancarà la sessió en aquest dispositiu!",
@@ -446,6 +455,9 @@
"customEndpoint": "Connectat a {endpoint}",
"pinText": "Fixa",
"unpinText": "Desfixa",
"pinnedCodeMessage": "{code} s'ha fixat",
"unpinnedCodeMessage": "{code} s'ha deixat de fixar",
"pinned": "Fixat",
"tags": "Etiquetes",
"createNewTag": "Crea una nova etiqueta",
"tag": "Etiqueta",
@@ -482,5 +494,13 @@
"appLockNotEnabled": "Bloqueig de l'aplicació no habilitat",
"appLockNotEnabledDescription": "Si us plau, habilita el bloqueig de l'aplicació a Seguretat > Bloqueig de l'aplicació",
"authToViewPasskey": "Autentica't per veure la passkey",
"appLockOfflineModeWarning": "Has triat procedir sense còpies de seguretat. Si oblides el bloqueig de l'aplicació, no podràs accedir a les teves dades."
"appLockOfflineModeWarning": "Has triat procedir sense còpies de seguretat. Si oblides el bloqueig de l'aplicació, no podràs accedir a les teves dades.",
"duplicateCodes": "Codis duplicats",
"noDuplicates": "✨ Sense duplicats",
"youveNoDuplicateCodesThatCanBeCleared": "No teniu codis duplicats que es puguin esborrar",
"deduplicateCodes": "Desduplica codis",
"deselectAll": "Desselecciona-ho tot",
"selectAll": "Seleccionar-ho tot",
"deleteDuplicates": "Elimina duplicats",
"plainHTML": "HTML pla"
}

View File

@@ -1 +1,504 @@
{}
{
"account": "Účet",
"unlock": "Odemknout",
"recoveryKey": "Obnovovací klíč",
"counterAppBarTitle": "Počítadlo",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Bezpečně zálohujte své 2FA kódy",
"onBoardingGetStarted": "Začínáme",
"setupFirstAccount": "Nastavte si první účet",
"importScanQrCode": "Skenovat QR kód",
"qrCode": "QR kód",
"importEnterSetupKey": "Zadejte nastavovací klíč",
"importAccountPageTitle": "Zadejte podrobnosti o účtu",
"secretCanNotBeEmpty": "Tajný klíč nemůže být prázdný",
"bothIssuerAndAccountCanNotBeEmpty": "Pole vydavatel a účet nesmějí být prázdná",
"incorrectDetails": "Nesprávné podrobnosti",
"pleaseVerifyDetails": "Prosím, ověřte podrobnosti a zkuste to znovu",
"codeIssuerHint": "Vydavatel",
"codeSecretKeyHint": "Tajný klíč",
"secret": "Tajný klíč",
"all": "Vše",
"notes": "Poznámky",
"notesLengthLimit": "Poznámky mohou být maximálně {count} znaků dlouhé",
"@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 (you@domain.com)",
"codeTagHint": "Tag",
"accountKeyType": "Druh klíče",
"sessionExpired": "Relace vypršela",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Přihlaste se, prosím, znovu",
"loggingOut": "Odhlašování...",
"timeBasedKeyType": "Časově založený (TOTP)",
"counterBasedKeyType": "Založeno na čítači (HOTP)",
"saveAction": "Uložit",
"nextTotpTitle": "další",
"deleteCodeTitle": "Odstranit kód?",
"deleteCodeMessage": "Opravdu chcete smazat tento kód? Tato akce je nevratná.",
"trashCode": "Přesunout kód do koše?",
"trashCodeMessage": "Opravdu chcete přesunout kód pro {account} do koše?",
"trash": "Koš",
"viewLogsAction": "Zobrazit logy",
"sendLogsDescription": "Tímto se odešlou protokoly, které nám pomohou vyladit váš problém. I když přijímáme opatření, abychom zajistili, že citlivé informace nebudou protokolovány, doporučujeme Vám si tyto protokoly prohlédnout, před sdílením prohlédnout.",
"preparingLogsTitle": "Příprava logů...",
"emailLogsTitle": "Zaslat logy e-mailem",
"emailLogsMessage": "Pošlete prosím logy na {email}",
"@emailLogsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"copyEmailAction": "Kopírovat e-mail",
"exportLogsAction": "Exportovat logy",
"reportABug": "Nahlásit chybu",
"crashAndErrorReporting": "Hlášení pádů a chyb",
"reportBug": "Nahlásit chybu",
"emailUsMessage": "Pošlete nám prosím e-mail na {email}",
"@emailUsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"contactSupport": "Kontaktovat podporu",
"rateUsOnStore": "Ohodnoťte nás na {storeName}",
"blog": "Blog",
"merchandise": "E-shop",
"verifyPassword": "Ověření hesla",
"pleaseWait": "Čekejte prosím...",
"generatingEncryptionKeysTitle": "Generování šifrovacích klíčů...",
"recreatePassword": "Znovu vytvořit heslo",
"recreatePasswordMessage": "Aktuální zařízení není dostatečně výkonné k ověření Vašeho hesla, potřebujeme ho proto obnovit způsobem, který bude fungovat se všemi zařízeními. \n\nPřihlaste se, prosím, použitím svého obnovovacího klíče a obnovte heslo (můžete použít stejné, pokud chcete).",
"useRecoveryKey": "Použít obnovovací klíč",
"incorrectPasswordTitle": "Nesprávné heslo",
"welcomeBack": "Vítejte zpět!",
"madeWithLoveAtPrefix": "vyrobeno s ❤️ v ",
"supportDevs": "Předplaťte si <bold-green>ente</bold-green>, abyste nás podpořili",
"supportDiscount": "Použijte kód \"AUTH\" pro získání 10% slevy na první rok",
"changeEmail": "Změnit e-mail",
"changePassword": "Změnit heslo",
"data": "Data",
"importCodes": "Importovat kódy",
"importTypePlainText": "Prostý text",
"importTypeEnteEncrypted": "Šifrovaný export z Ente",
"passwordForDecryptingExport": "Heslo pro dešifrování exportu",
"passwordEmptyError": "Heslo nemůže být prázdné",
"importFromApp": "Importovat kódy z {appName}",
"importGoogleAuthGuide": "Exportujte své účty z Google Authenticator do QR kódu pomocí možnosti \"Transfer Accounts\". Potom pomocí jiného zařízení naskenujte QR kód.\n\nTip: Pro vyfocení QR kódu můžete použít webovou kameru svého notebooku..",
"importSelectJsonFile": "Vybrat soubor JSON",
"importSelectAppExport": "Vybrat soubor exportovaný z {appName}",
"importEnteEncGuide": "Vyberte šifrovaný JSON soubor exportovaný z Ente",
"importRaivoGuide": "Použijte možnost \"Export OTPs to Zip archive\" v nastavení aplikace Raivo.",
"importBitwardenGuide": "Použijte možnost \"Export vault\" v Bitwarden Tools a inportujte nešifrovaný soubor JSON.",
"importAegisGuide": "Použijte možnost \"Export the vault\" v nastavení aplikace Aegis.",
"import2FasGuide": "Použijte možnost \"Settings->Backup -Export\" v 2FA.\n\nPokud je Vaše záloha šifrovaná, budete muset zadat heslo pro její odemčení",
"importLastpassGuide": "V nastavení aplikace Lastpass Authenticator vyberte možnost \"Transfer accounts\" a poté \"Export accounts to file\". Vygenerovaný soubor JSON následně nahrajte sem.",
"exportCodes": "Exportovat kódy",
"importLabel": "Importovat",
"importInstruction": "Vyberte, prosím, soubor obsahující seznam Vašich kódů v následujícím formátu",
"importCodeDelimiterInfo": "Kódy mohou být odděleny čárkou nebo novým řádkem",
"selectFile": "Vybrat soubor",
"emailVerificationToggle": "Ověření pomocí e-mailu",
"emailVerificationEnableWarning": "Abyste předešli uzamčení svého účtu, nezapomeňte si před povolením ověření e-mailem uložit kopii svého 2FA emailu mimo Ente Auth.",
"authToChangeEmailVerificationSetting": "Pro změnu ověření pomocí emailu se musíte ověřit",
"authenticateGeneric": "Ověřte se, prosím",
"authToViewYourRecoveryKey": "Pro zobrazení svého obnovovacího klíče se, prosím, ověřte",
"authToChangeYourEmail": "Pro změnu svého e-mailu se, prosím, ověřte",
"authToChangeYourPassword": "Pro změnu svého hesla se, prosím, ověřte",
"authToViewSecrets": "Pro zobrazení svých tajných údajů se musíte ověřit",
"ok": "Ok",
"cancel": "Zrušit",
"yes": "Ano",
"no": "Ne",
"email": "E-mail",
"support": "Podpora",
"general": "Hlavní",
"settings": "Nastavení",
"copied": "Zkopírováno",
"pleaseTryAgain": "Zkuste to prosím znovu",
"existingUser": "Stávající uživatel",
"newUser": "Nový uživatel Ente",
"delete": "Smazat",
"enterYourPasswordHint": "Zadejte své heslo",
"forgotPassword": "Zapomenuté heslo",
"oops": "Jejda",
"suggestFeatures": "Navrhnout funkce",
"faq": "Často kladené dotazy (FAQ)",
"somethingWentWrongMessage": "Něco se pokazilo. Zkuste to prosím znovu",
"leaveFamily": "Odejít z rodiny",
"leaveFamilyMessage": "Jste si jisti, že chcete opustit rodinný plán?",
"inFamilyPlanMessage": "Jste v rodinném tarifu!",
"hintForMobile": "Pro odstranění nebo úpravu kódu dlouze podržte.",
"hintForDesktop": "Pro úpravu nebo smazáno klikněte na kód pravým tlačítkem.",
"scan": "Skenovat",
"scanACode": "Skenovat kód",
"verify": "Ověřit",
"verifyEmail": "Ověřit e-mail",
"enterCodeHint": "Zadejte 6místný kód ze své autentizační aplikace",
"lostDeviceTitle": "Ztratili jste zařízení?",
"twoFactorAuthTitle": "Dvoufaktorové ověření",
"verifyPasskey": "Ověřit přístupový klíč",
"loginWithTOTP": "Přihlášení s TOTP",
"recoverAccount": "Obnovit účet",
"enterRecoveryKeyHint": "Zadejte svůj obnovovací klíč",
"recover": "Obnovit",
"contactSupportViaEmailMessage": "Prosím zašlete e-mail na ",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"invalidQRCode": "Neplatný QR kód",
"noRecoveryKeyTitle": "Nemáte obnovovací klíč?",
"enterEmailHint": "Zadejte svou e-mailovou adresu",
"invalidEmailTitle": "Neplatná e-mailová adresa",
"invalidEmailMessage": "Prosím, zadejte platnou e-mailovou adresu.",
"deleteAccount": "Odstranit účet",
"deleteAccountQuery": "Mrzí nás, že odcházíte. Máte nějaké problémy s aplikací?",
"yesSendFeedbackAction": "Ano, poslat zpětnou vazbu",
"noDeleteAccountAction": "Ne, odstranit účet",
"initiateAccountDeleteTitle": "Pro zahájení odstranění účtu se, prosím, ověřte",
"sendEmail": "Odeslat e-mail",
"createNewAccount": "Vytvořit nový účet",
"weakStrength": "Slabé",
"strongStrength": "Silné",
"moderateStrength": "Střední",
"confirmPassword": "Potvrzení hesla",
"close": "Zavřít",
"oopsSomethingWentWrong": "Jejda, něco se pokazilo.",
"selectLanguage": "Vybrat jazyk",
"language": "Jazyk",
"social": "Sociální sítě",
"security": "Zabezpečení",
"lockscreen": "Zamykací obrazovka",
"authToChangeLockscreenSetting": "Pro změnu nastavení uzamčení obrazovky se musíte ověřit",
"deviceLockEnablePreSteps": "Pro aktivaci zámku zařízení si nastavte přístupový kód zařízení nebo zámek obrazovky v nastavení systému.",
"viewActiveSessions": "Zobrazit aktivní relace",
"authToViewYourActiveSessions": "Pro zobrazení svých aktivních relací se, prosím, ověřte",
"searchHint": "Vyhledávejte...",
"search": "Hledání",
"sorryUnableToGenCode": "Omlouváme se, nepodařilo se vygenerovat kód pro {issuerName}",
"noResult": "Žádné výsledky",
"addCode": "Přidat kód",
"scanAQrCode": "Naskenovat QR kód",
"enterDetailsManually": "Vložit údaje ručně",
"edit": "Upravit",
"share": "Sdílet",
"shareCodes": "Sdílet kódy",
"shareCodesDuration": "Vyberte dobu, po kterou chcete kódy sdílet.",
"restore": "Obnovit",
"copiedToClipboard": "Zkopírováno do schránky",
"copiedNextToClipboard": "Další kód zkopírován do schránky",
"error": "Chyba",
"recoveryKeyCopiedToClipboard": "Obnovovací klíč byl zkopírován",
"recoveryKeyOnForgotPassword": "Tento klíč je jedinou cestou pro obnovení Vašich dat, pokud zapomenete heslo.",
"recoveryKeySaveDescription": "Tento 24místný klíč neuchováváme, uschovejte ho, prosím, na bezpečném místě.",
"doThisLater": "Udělat později",
"saveKey": "Uložit klíč",
"save": "Uložit",
"send": "Odeslat",
"saveOrSendDescription": "Chcete toto uložit do paměti zařízení (ve výchozím nastavení do složky Stažené soubory), nebo odeslat do jiných aplikací?",
"saveOnlyDescription": "Chcete toto uložit do paměti zařízení (ve výchozím nastavení do složky Stažené soubory)?",
"back": "Zpět",
"createAccount": "Vytvořit účet",
"passwordStrength": "Síla hesla: {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": "Heslo",
"signUpTerms": "Souhlasím s <u-terms>podmínkami služby</u-terms> a <u-terms>zásadami ochrany osobních údajů</u-terms>",
"privacyPolicyTitle": "Podmínky ochrany osobních údajů",
"termsOfServicesTitle": "Podmínky",
"encryption": "Šifrování",
"setPasswordTitle": "Nastavit heslo",
"changePasswordTitle": "Změnit heslo",
"resetPasswordTitle": "Obnovit heslo",
"encryptionKeys": "Šifrovací klíče",
"passwordWarning": "Vaše heslo neuchováváme. Pokud ho zapomenete, <underline>nemůžeme Vaše data dešifrovat</underline>",
"enterPasswordToEncrypt": "Zadejte heslo, kterým můžeme zašifrovat Vaše data",
"enterNewPasswordToEncrypt": "Zadejte nové heslo, kterým můžeme šifrovat Vaše data",
"passwordChangedSuccessfully": "Heslo úspěšně změněno",
"generatingEncryptionKeys": "Generování šifrovacích klíčů...",
"continueLabel": "Pokračovat",
"insecureDevice": "Nezabezpečené zařízení",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Omlouváme se, na tomto zařízení nemůžeme vygenerovat bezpečné klíče.\n\nprosím přihlaste se z jiného zařízení.",
"howItWorks": "Jak to funguje",
"ackPasswordLostWarning": "Rozumím, že při zapomenutí hesla mohu ztratit svá data, protože jsou zabezpečena <underline>koncovým šifrováním</underline>.",
"loginTerms": "Kliknutím na přihlášení souhlasím s <u-terms>podmínkami služby</u-terms> a <u-policy>zásadami ochrany osobních údajů</u-policy>",
"logInLabel": "Přihlásit se",
"logout": "Odhlásit se",
"areYouSureYouWantToLogout": "Opravdu se chcete odhlásit?",
"yesLogout": "Ano, odhlásit se",
"exit": "Konec",
"theme": "Motiv",
"lightTheme": "Světlý",
"darkTheme": "Tmavý",
"systemTheme": "Systém",
"verifyingRecoveryKey": "Ověřování obnovovacího klíče...",
"recoveryKeyVerified": "Obnovovací klíč byl ověřen",
"recoveryKeySuccessBody": "Skvělé! ",
"invalidRecoveryKey": "Vámi zadaný obnovovací klíč není platný. Prosím, ujistěte se, že obsahuje 24 slov, zkontrolujte také jejich hláskování.\n\nPokud jste zadali starší obnovovací kód, ujistěte se, že je dlouhý 64 znaků a zkontrolujte každý z nich.",
"recreatePasswordTitle": "Resetovat heslo",
"recreatePasswordBody": "Aktzální zařízení není dostatečně výkonné pro ověření Vašeho hesla, ale můžeme ho regenerovat způsobem, který funguje ve všech zařízením.\n\nPřihlašte se pomocí obnovovacího klíče a znovu si vygenerujte své heslo (můžete použít opět stejné, pokud chcete).",
"invalidKey": "Neplatný klíč",
"tryAgain": "Zkusit znovu",
"viewRecoveryKey": "Zobrazit obnovovací klíč",
"confirmRecoveryKey": "Potvrdit obnovovací klíč",
"recoveryKeyVerifyReason": "Váš obnovovací klíč je jedinou cestou pro obnovení Vašich fotek, pokud zapomenete heslo. Můžete ho najít v Nastavení > Účet.\n\nZadejte, prosím, svůj obnovovací klíč pro ověření, že si ho pamatujete správně.",
"confirmYourRecoveryKey": "Potvrďte svůj obnovovací klíč",
"confirm": "Potvrdit",
"emailYourLogs": "Zašlete své logy e-mailem",
"pleaseSendTheLogsTo": "Pošlete prosím logy na \n{toEmail}",
"copyEmailAddress": "Kopírovat e-mailovou adresu",
"exportLogs": "Exportovat logy",
"enterYourRecoveryKey": "Zadejte svůj obnovovací klíč",
"tempErrorContactSupportIfPersists": "Vypadá to, že se něco pokazilo. Zkuste to znovu po delší době. Pokud chyba přetrvává, kontaktujte náš tým podpory.",
"networkHostLookUpErr": "Nelze se připojit k Ente, zkontrolujte, prosím, nastavení své sítě a kontaktujte podporu, pokud chyba přetrvává",
"networkConnectionRefusedErr": "Nepodařilo se připojit k Ente, zkuste to po nějaké době znovu. Pokud chyba přetrvává, kontaktujte, prosím, podporu.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Vypadá to, že se něco pokazilo. Zkuste to prosím znovu po nějaké době. Pokud chyba přetrvává, kontaktujte prosím naši podporu.",
"about": "O aplikaci",
"weAreOpenSource": "Jsme open source!",
"privacy": "Soukromí",
"terms": "Podmínky",
"checkForUpdates": "Zkontrolovat aktualizace",
"checkStatus": "Zkontrolovat stav",
"downloadUpdate": "Stáhnout",
"criticalUpdateAvailable": "Je k dispozici kritická aktualizace",
"updateAvailable": "Je k dispozici aktualizace",
"update": "Aktualizace",
"checking": "Probíhá kontrola...",
"youAreOnTheLatestVersion": "Máte nejnovější verzi",
"warning": "Upozornění",
"exportWarningDesc": "Exportovaný soubor obsahuje citlivé informace. Uložte jej bezpečně.",
"iUnderStand": "Rozumím",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "Pro export svých kódů se, prosím, ověřte",
"importSuccessTitle": "Paráda!",
"importSuccessDesc": "Importovali jste {count} kódů!",
"@importSuccessDesc": {
"placeholders": {
"count": {
"description": "The number of codes imported",
"type": "int",
"example": "1"
}
}
},
"sorry": "Omlouváme se",
"importFailureDesc": "Nelze analyzovat vybraný soubor.\nProsím napište na support@ente.io, pokud potřebujete pomoc!",
"pendingSyncs": "Upozornění",
"pendingSyncsWarningBody": "Některé z Vašich kódů nebyly zálohované.\n\nPřed odhlášením se, prosím, ujistěte o jejich záloze.",
"checkInboxAndSpamFolder": "Pro dokončení ověření prosím zkontrolujte, prosím, svou doručenou poštu (a spamy)",
"tapToEnterCode": "Klepnutím zadejte kód",
"resendEmail": "Odeslat e-mail znovu",
"weHaveSendEmailTo": "Odeslali jsme e-mail na <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": "Vlastní",
"editOrder": "Upravit pořadí",
"mostFrequentlyUsed": "Nejpoužívanější",
"mostRecentlyUsed": "Naposledy použité",
"activeSessions": "Aktivní relace",
"somethingWentWrongPleaseTryAgain": "Něco se pokazilo. Zkuste to, prosím, znovu",
"thisWillLogYouOutOfThisDevice": "Tato akce Vás odhlásí z tohoto zařízení!",
"thisWillLogYouOutOfTheFollowingDevice": "Toto Vás odhlásí z následujícího zařízení:",
"terminateSession": "Ukončit relaci?",
"terminate": "Ukončit",
"thisDevice": "Toto zařízení",
"toResetVerifyEmail": "Pro obnovení hesla obnovte, prosím, nejprve svůj e-mail.",
"thisEmailIsAlreadyInUse": "Tento e-mail je již používán",
"verificationFailedPleaseTryAgain": "Ověření selhalo, přihlaste se, prosím, znovu",
"yourVerificationCodeHasExpired": "Váš ověřovací kód vypršel",
"incorrectCode": "Nesprávný kód",
"sorryTheCodeYouveEnteredIsIncorrect": "Omlouváme se, zadaný kód je nesprávný",
"emailChangedTo": "E-mail změněn na {newEmail}",
"authenticationFailedPleaseTryAgain": "Ověření selhalo, zkuste to, prosím, znovu",
"authenticationSuccessful": "Ověření bylo úspěšné!",
"twofactorAuthenticationSuccessfullyReset": "Dvoufázové ověření bylo úspěšně obnoveno",
"incorrectRecoveryKey": "Nesprávný obnovovací klíč",
"theRecoveryKeyYouEnteredIsIncorrect": "Vámi zadaný obnovovací klíč je nesprávný",
"enterPassword": "Zadejte heslo",
"selectExportFormat": "Vyberte formát exportu",
"exportDialogDesc": "Šifrované exporty budou chráněny heslem dle vašeho výběru.",
"encrypted": "Šifrovaný",
"plainText": "Prostý text",
"passwordToEncryptExport": "Heslo pro šifrování exportu",
"export": "Export",
"useOffline": "Použít bez zálohování",
"signInToBackup": "Pro zálohování vašich kódů se přihlaste",
"singIn": "Přihlásit se",
"sigInBackupReminder": "Exportujte prosím své kódy, abyste se ujistili, že máte zálohu, ze které můžete obnovit.",
"offlineModeWarning": "Zvolili jste si pokračovat bez zálohování. Provádějte, prosím, manuální zálohy pro jistotu bezpečí svých kódů.",
"showLargeIcons": "Zobrazit velké ikony",
"compactMode": "Kompaktní režim",
"shouldHideCode": "Skrýt kódy",
"doubleTapToViewHiddenCode": "Pro zobrazení kódu můžete dvakrát klepnout na záznam",
"focusOnSearchBar": "Zaměřit hledání při spuštění aplikace",
"confirmUpdatingkey": "Opravdu chcete aktualizovat tajný klíč?",
"minimizeAppOnCopy": "Minimalizovat aplikaci po zkopírování",
"editCodeAuthMessage": "Pro úpravu kódu se ověřte",
"deleteCodeAuthMessage": "Pro odstranění kódu se ověřte",
"showQRAuthMessage": "Pro zobrazení QR kódu se ověřte",
"confirmAccountDeleteTitle": "Potvrdit odstranění účtu",
"confirmAccountDeleteMessage": " ",
"androidBiometricHint": "Ověřte svou identitu",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "Nerozpoznáno. Zkuste znovu.",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "Úspěch",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "Zrušit",
"@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": "Je požadováno ověření",
"@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": "Je požadováno biometrické ověření",
"@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": "Jsou vyžadovány přihlašovací údaje zařízení",
"@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": "Jsou vyžadovány přihlašovací údaje zařízení",
"@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": "Jít do nastavení",
"@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": "Na Vašem zařízení není nastaveno biometrické ověřování. Pro aktivaci běžte do 'Nastavení > Zabezpečení'.",
"@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": "Biometrické ověřování není povoleno. Pro povolení zamkněte a odemkněte obrazovku.",
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
"iOSGoToSettingsDescription": "Na Vašem zařízení není nastaveno biometrické ověřování. Nastavte si na svém telefonu Touch ID nebo Face ID, prosím.",
"@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": "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": "Žádné připojení k internetu",
"pleaseCheckYourInternetConnectionAndTryAgain": "Zkontrolujte, prosím, své připojení k internetu a zkuste to znovu.",
"signOutFromOtherDevices": "Odhlásit z ostatních zařízení",
"signOutOtherBody": "Pokud si myslíte, že by někdo mohl znát Vaše heslo, můžete vynutit odhlášení ostatních zařízení používajících Váš účet.",
"signOutOtherDevices": "Odhlásit z ostatních zařízení",
"doNotSignOut": "Neodhlašovat",
"hearUsWhereTitle": "Jak jste se dozvěděli o Ente? (volitelné)",
"hearUsExplanation": "Ne sledujeme instalace aplikace. Pomůže nám, když nám sdělíte, kde jste nás našli!",
"recoveryKeySaved": "Obnovovací klíč uložen do složky Stažené soubory!",
"waitingForBrowserRequest": "Čekání na požadavek prohlížeče...",
"waitingForVerification": "Čekání na ověření...",
"passkey": "Přístupový klíč",
"passKeyPendingVerification": "Ověřování stále probíhá",
"loginSessionExpired": "Relace vypršela",
"loginSessionExpiredDetails": "Vaše relace vypršela. Přihlaste se, prosím, znovu.",
"developerSettingsWarning": "Opravdu chcete změnit nastavení pro vývojáře?",
"developerSettings": "Nastavení pro vývojáře",
"serverEndpoint": "Koncový bod serveru",
"invalidEndpoint": "Neplatný koncový bod",
"invalidEndpointMessage": "Zadaný koncový bod je neplatný. Zadejte prosím platný koncový bod a zkuste to znovu.",
"endpointUpdatedMessage": "Koncový bod byl úspěšně aktualizován",
"customEndpoint": "Připojeno k {endpoint}",
"pinText": "Připnout",
"unpinText": "Odepnout",
"pinnedCodeMessage": "{code} byl připnut",
"unpinnedCodeMessage": "{code} byl odepnut",
"pinned": "Připnuté",
"tags": "Tagy",
"createNewTag": "Vytvořit nový tag",
"tag": "Tag",
"create": "Vytvořit",
"editTag": "Upravit tag",
"deleteTagTitle": "Odstranit tag?",
"deleteTagMessage": "Jste si jistí, že chcete odstranit tento tag? Akce je nevratná.",
"somethingWentWrongParsingCode": "Nepovedlo se ",
"updateNotAvailable": "Aktualizace není dostupná",
"viewRawCodes": "Zobrazit nezpracované kódy",
"rawCodes": "Nezpracované kódy",
"rawCodeData": "Nezpracovaná kódová data",
"appLock": "Zámek aplikace",
"noSystemLockFound": "Zámek systému nenalezen",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Pro aktivaci zámku aplikace si pro prosím nastavte zámek obrazovky v nastavení svého systému.",
"autoLock": "Automatické zamykání",
"immediately": "Ihned",
"reEnterPassword": "Zadejte heslo znovu",
"reEnterPin": "Zadejte PIN znovu",
"next": "Další",
"tooManyIncorrectAttempts": "Příliš mnoho neúspěšných pokusů",
"tapToUnlock": "Pro odemčení klepněte",
"setNewPassword": "Nastavit nové heslo",
"deviceLock": "Zámek zařízení",
"hideContent": "Skrýt obsah",
"hideContentDescriptionAndroid": "Skryje obsah aplikace ve ",
"hideContentDescriptioniOS": "Skryje obsah aplikace při přepínání úloh",
"autoLockFeatureDescription": "Interval, po kterém se aplikace běžící na pozadí uzamkne",
"appLockDescription": "Vyberte si mezi zámkem obrazovky svého zařízení a vlastním zámkem obrazovky s PIN kódem nebo heslem.",
"pinLock": "Uzamčení na PIN",
"enterPin": "Zadejte PIN",
"setNewPin": "Nadra",
"importFailureDescNew": "Nelze analyzovat vybraný soubor.",
"appLockNotEnabled": "Zámek aplikaci není aktivní",
"appLockNotEnabledDescription": "Aktivujte, prosím, zámek aplikace v 'Nastavení > Zámek aplikace'",
"authToViewPasskey": "Pro zobrazení přístupového klíče se, prosím, ověřte",
"appLockOfflineModeWarning": "Zvolili jste si pokračování bez zálohování. Pokud zapomenete heslo do aplikace, přístup k datům bude uzamčen.",
"duplicateCodes": "Duplikovat kódy",
"noDuplicates": "✨ Žádné duplikáty",
"youveNoDuplicateCodesThatCanBeCleared": "Nemáte žádné duplicitní kódy k odstranění",
"deduplicateCodes": "Deduplikovat kódy",
"deselectAll": "Zrušit výběr všech položek",
"selectAll": "Vybrat vše",
"deleteDuplicates": "Odstranit duplikáty",
"plainHTML": "Prosté HTML"
}

View File

@@ -88,6 +88,8 @@
"useRecoveryKey": "Use recovery key",
"incorrectPasswordTitle": "Incorrect password",
"welcomeBack": "Welcome back!",
"emailAlreadyRegistered": "Email already registered.",
"emailNotRegistered": "Email not registered.",
"madeWithLoveAtPrefix": "made with ❤️ at ",
"supportDevs": "Subscribe to <bold-green>ente</bold-green> to support us",
"supportDiscount": "Use coupon code \"AUTH\" to get 10% off first year",

View File

@@ -487,7 +487,7 @@
"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": "Bloqueo con Pin",
"pinLock": "Bloqueo con PIN",
"enterPin": "Ingresa el PIN",
"setNewPin": "Establecer nuevo PIN",
"importFailureDescNew": "No se pudo analizar el archivo seleccionado.",
@@ -501,5 +501,6 @@
"deduplicateCodes": "Desduplicar códigos",
"deselectAll": "Deseleccionar todo",
"selectAll": "Seleccionar todo",
"deleteDuplicates": "Eliminar duplicados"
"deleteDuplicates": "Eliminar duplicados",
"plainHTML": "HTML plano"
}

View File

@@ -6,11 +6,11 @@
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Sécurisez vos codes A2F",
"onBoardingBody": "Sauvegarder vos codes A2F",
"onBoardingGetStarted": "Premiers pas",
"setupFirstAccount": "Configurez votre premier compte",
"importScanQrCode": "Scannez un QR Code",
"qrCode": "Code QR",
"qrCode": "QR Code",
"importEnterSetupKey": "Saisir une clé de configuration",
"importAccountPageTitle": "Saisir les détails du compte",
"secretCanNotBeEmpty": "La clé secrète ne peut pas être vide",
@@ -20,6 +20,7 @@
"codeIssuerHint": "Émetteur",
"codeSecretKeyHint": "Clé secrète",
"secret": "Confidentiel",
"all": "Tout",
"notes": "Notes",
"notesLengthLimit": "Les notes peuvent contenir au maximum {count} caractères",
"@notesLengthLimit": {
@@ -87,6 +88,8 @@
"useRecoveryKey": "Utiliser la clé de récupération",
"incorrectPasswordTitle": "Mot de passe incorrect",
"welcomeBack": "Bon retour parmi nous !",
"emailAlreadyRegistered": "E-mail déjà enregistré.",
"emailNotRegistered": "E-mail non enregistré.",
"madeWithLoveAtPrefix": "fait avec ❤️ à ",
"supportDevs": "Abonnez-vous à <bold-green>ente</bold-green> pour nous soutenir",
"supportDiscount": "Utilisez le code coupon \"AUTH\" pour obtenir 10% de réduction sur la première année",
@@ -155,6 +158,7 @@
"twoFactorAuthTitle": "Authentification à deux facteurs",
"passkeyAuthTitle": "Vérification du code d'accès",
"verifyPasskey": "Vérifier le code d'accès",
"loginWithTOTP": "Se connecter avec un code TOTP",
"recoverAccount": "Récupérer un compte",
"enterRecoveryKeyHint": "Saisissez votre clé de récupération",
"recover": "Restaurer",
@@ -256,6 +260,10 @@
"areYouSureYouWantToLogout": "Êtes-vous sûr de vouloir vous déconnecter ?",
"yesLogout": "Oui, se déconnecter",
"exit": "Quitter",
"theme": "Thème",
"lightTheme": "Clair",
"darkTheme": "Sombre",
"systemTheme": "Système",
"verifyingRecoveryKey": "Vérification de la clé de récupération...",
"recoveryKeyVerified": "Clé de récupération vérifiée",
"recoveryKeySuccessBody": "Parfait ! Votre clé de récupération est valide. Merci pour la vérification.\n\nN'oubliez pas de garder cette clé de récupération en lieu sûr.",
@@ -326,6 +334,10 @@
}
}
},
"manualSort": "Personnaliser",
"editOrder": "Modifier la commande",
"mostFrequentlyUsed": "Utilisé fréquemment",
"mostRecentlyUsed": "Utilisé récemment",
"activeSessions": "Sessions actives",
"somethingWentWrongPleaseTryAgain": "Quelque chose s'est mal passé, veuillez recommencer",
"thisWillLogYouOutOfThisDevice": "Cela vous déconnectera de cet appareil !",
@@ -445,6 +457,9 @@
"customEndpoint": "Connecté à {endpoint}",
"pinText": "Épingler",
"unpinText": "Désépingler",
"pinnedCodeMessage": "{code} épinglé",
"unpinnedCodeMessage": "{code} désépinglé",
"pinned": "Épinglé",
"tags": "Tags",
"createNewTag": "Créer un nouveau tag",
"tag": "Tag",
@@ -470,12 +485,24 @@
"setNewPassword": "Définir un nouveau mot de passe",
"deviceLock": "Verrouillage de l'appareil",
"hideContent": "Masquer le contenu",
"hideContentDescriptionAndroid": "Masque le contenu de l'application sur le menu et désactive les captures d'écran",
"hideContentDescriptioniOS": "Masque le contenu de l'application sur le menu",
"autoLockFeatureDescription": "Délai après lequel l'application se verrouille une fois qu'elle a été mise en arrière-plan",
"appLockDescription": "Choisissez entre l'écran de verrouillage par défaut de votre appareil et un écran de verrouillage par code PIN ou mot de passe personnalisé.",
"pinLock": "Verrouillage par code PIN",
"enterPin": "Saisir le code PIN",
"setNewPin": "Définir un nouveau code PIN",
"importFailureDescNew": "Impossible de lire le fichier sélectionné.",
"appLockNotEnabled": "Verrouillage d'application désactivé",
"appLockNotEnabledDescription": "Activez le verrouillage d'application dans Sécurité > Verrouillage d'application",
"authToViewPasskey": "Veuillez vous authentifier pour afficher la clé d'accès",
"appLockOfflineModeWarning": "Vous avez choisi de fonctionner sans sauvegardes. Si vous oubliez votre outil Applock, vous serez bloqué dans l'accès à vos données."
"appLockOfflineModeWarning": "Vous avez choisi de fonctionner sans sauvegardes. Si vous oubliez votre outil Applock, vous serez bloqué dans l'accès à vos données.",
"duplicateCodes": "Codes dupliqués",
"noDuplicates": "✨ Pas de doublons",
"youveNoDuplicateCodesThatCanBeCleared": "Vous n'avez aucun code en doublon pouvant être supprimé",
"deduplicateCodes": "Codes dédupliqués",
"deselectAll": "Tout désélectionner",
"selectAll": "Tout sélectionner",
"deleteDuplicates": "Supprimer les doublons",
"plainHTML": "HTML Pur"
}

View File

@@ -1 +1,508 @@
{}
{
"account": "Fiók",
"unlock": "Feloldás",
"recoveryKey": "Visszaállítási kulcs",
"counterAppBarTitle": "Számláló",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Biztonsági mentés készítése a 2FA kódokról",
"onBoardingGetStarted": "Kezdjünk bele",
"setupFirstAccount": "Állítsd be az első fiókodat",
"importScanQrCode": "QR kód beolvasása",
"qrCode": "QR kód",
"importEnterSetupKey": "Adjon meg egy beállítási kulcsot",
"importAccountPageTitle": "Adja meg a fiók adatait",
"secretCanNotBeEmpty": "A titkos kulcs nem lehet üres",
"bothIssuerAndAccountCanNotBeEmpty": "A kibocsátó és a fiók mezője nem lehet üres",
"incorrectDetails": "Helytelen adatok",
"pleaseVerifyDetails": "Kérjük, ellenőrizd az adataid, majd próbáld meg újra",
"codeIssuerHint": "Kibocsátó",
"codeSecretKeyHint": "Titkos (Secret) kulcs",
"secret": "Titkos kód",
"all": "Minden",
"notes": "Megjegyzések",
"notesLengthLimit": "A megjegyzés {count} karakter hosszú lehet",
"@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": "Felhasználói Fiók (you@domain.com)",
"codeTagHint": "Címke",
"accountKeyType": "Kulcs típusa",
"sessionExpired": "A munkamenet lejárt",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Kérjük, jelentkezzen be újra",
"loggingOut": "Kijelentkezés...",
"timeBasedKeyType": "Idő alapú (TOTP)",
"counterBasedKeyType": "Számláló alappú (HOTP)",
"saveAction": "Mentés",
"nextTotpTitle": "következő",
"deleteCodeTitle": "Kódok Törlése?",
"deleteCodeMessage": "Biztos, hogy véglegesen törli a kódot? Ez nem vonható vissza.",
"trashCode": "Lomtárba helyezi?",
"trashCodeMessage": "Biztos, hogy lomtárba helyezi a kódot a(z) {account} fiókhoz?",
"trash": "Szemetes",
"viewLogsAction": "Naplók megtekintése",
"sendLogsDescription": "Naplókat küld, hogy segítsen nekünk a probléma elhárításában. Bár óvintézkedéseket teszünk annak biztosítására, hogy az érzékeny adatok ne kerüljenek naplózásra, javasoljuk, hogy tekintse meg ezeket a naplókat, mielőtt megosztaná őket.",
"preparingLogsTitle": "Naplófájlok előkészítése...",
"emailLogsTitle": "Naplófájl küldése emailben",
"emailLogsMessage": "Külje el a naplófájlt a(z) {email} címre",
"@emailLogsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"copyEmailAction": "E-mail cím másolása",
"exportLogsAction": "Naplófájlok exportálása",
"reportABug": "Hiba bejelentése",
"crashAndErrorReporting": "Összeomlás és hiba jelentése",
"reportBug": "Hibajelentés",
"emailUsMessage": "Kérjük küldjön email üzenetet nekünk a következő email címre: {email}",
"@emailUsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"contactSupport": "Lépj kapcsolatba az Ügyfélszolgálattal",
"rateUsOnStore": "Értékelj minket a következőn: {storeName}",
"blog": "Blog",
"merchandise": "Áru",
"verifyPassword": "Jelszó megerősítése",
"pleaseWait": "Kérem várjon...",
"generatingEncryptionKeysTitle": "Titkosítási kulcs generálása...",
"recreatePassword": "Jelszó újra létrehozása",
"recreatePasswordMessage": "A jelenlegi eszköz nem elég erős a jelszavának ellenőrzéséhez, de újra tudjuk úgy generálni, hogy az minden eszközzel működjön.\n\nKérjük, jelentkezzen be helyreállítási kulcsával, és állítsa be újra jelszavát (ha szeretné, újra használhatja ugyanazt).",
"useRecoveryKey": "Helyreállítási kulcs használata",
"incorrectPasswordTitle": "Érvénytelen jelszó",
"welcomeBack": "Köszöntjük ismét!",
"emailAlreadyRegistered": "Ez az e-mai cím már regisztrálva van.",
"emailNotRegistered": "Ez az e-mail cím nincs regisztrálva.",
"madeWithLoveAtPrefix": "Készült ❤️ - ",
"supportDevs": "Iratkozz fel az <bold-green>ente</bold-green> csatornára",
"supportDiscount": "Használd az \"AUTH\" kupon kódot, hogy 10% kedvezményben részesülj az első évben",
"changeEmail": "E-mail cím módosítása",
"changePassword": "Jelszó módosítása",
"data": "Adat",
"importCodes": "Kódok importálása",
"importTypePlainText": "Egyszerű szöveg",
"importTypeEnteEncrypted": "Ente titkosított exportálás",
"passwordForDecryptingExport": "Jelszó az exportált fájl titkosításához",
"passwordEmptyError": "A jelszó nem lehet üres",
"importFromApp": "Kódok imporátálása {appName} alkalmazásból",
"importGoogleAuthGuide": "Exportálja fiókjait a Google Hitelesítőből QR kód segítségével a „Kódok átvitele” lehetőség segítségével. Ezután egy másik eszközzel olvassa be a QR kódot.\n\nTipp: Laptopja webkamerája segítségével lefényképezheti a QR kódot.",
"importSelectJsonFile": "JSON fájl kiválasztása",
"importSelectAppExport": "Válassza ki az {appName} exportfájlt",
"importEnteEncGuide": "Titkosított JSON export-fájl kiválasztása ",
"importRaivoGuide": "Használja az \"OTP-k exportálása tömörített archívumba\" opciót a Raivo beállításaiban.\n\nCsomagolja ki a zip fájlt, és importálja a JSON fájlt.",
"importBitwardenGuide": "Használja a Bitwarden eszközök \"Export Vault\" opcióját és importálja a titkosítatlan JSON fájlt.",
"importAegisGuide": "Használja az Aegis beállításaiban található \"Export the vault\" opciót.\n\nHa a vault titkosított, akkor meg kell adnia a vault jelszavát a tároló visszafejtéséhez.",
"import2FasGuide": "Használja a \"Beállítások->Biztonsági mentés - Exportálás\" opciót a 2FAS-ban.\n\nHa a biztonsági másolat titkosított, akkor meg kell adnia a jelszót a biztonsági másolat visszafejtéséhez",
"importLastpassGuide": "Használja a Lastpass Authenticator beállításaiban található \"Fiókok átvitele\" opciót, és nyomja meg a \"Fiókok exportálása fájlba\" gombot. Importálja a letöltött JSON-t.",
"exportCodes": "Kódok exportálása",
"importLabel": "Importálás",
"importInstruction": "Kérjük, válasszon egy fájlt, amely tartalmazza a kódok listáját a következő formátumban",
"importCodeDelimiterInfo": "A kódokat vesszővel vagy új sorral lehet elválasztani",
"selectFile": "Fájl kiválasztása",
"emailVerificationToggle": "E-mail cím ellenőrzése",
"emailVerificationEnableWarning": "Annak elkerülése érdekében, hogy kizárja magát fiókjából, az e-mail-ellenőrzés engedélyezése előtt mindenképpen tárolja e-mailje 2FA másolatát az Ente Auth-on kívül.",
"authToChangeEmailVerificationSetting": "Kérjük, hitelesítse magát az e-mail ellenőrzés módosításához",
"authenticateGeneric": "Kérjük hitelesítsen",
"authToViewYourRecoveryKey": "A visszaállítási kulcsok megtekintéséhez hitelesítse magát",
"authToChangeYourEmail": "Kérjük jelentkezzen be, hogy megváltoztathassa e-mail címét",
"authToChangeYourPassword": "Kérjük jelentkezzen be, hogy megváltoztathassa jelszavát",
"authToViewSecrets": "A titkos kulcsok megtekintéséhez hitelesítse magát",
"authToInitiateSignIn": "Kérjük jelentkezzen be, hogy biztonsági mentést hozhasson létre.",
"ok": "OK",
"cancel": "Mégse",
"yes": "Igen",
"no": "Nem",
"email": "E-mail",
"support": "Segítség",
"general": "Általános",
"settings": "Beállítások",
"copied": "Másolva!",
"pleaseTryAgain": "Kérjük, próbálja meg újra",
"existingUser": "Meglévő felhasználó",
"newUser": "Új Ente felhasználó",
"delete": "Törlés",
"enterYourPasswordHint": "Adja meg a jelszavát",
"forgotPassword": "Elfelejtett jelszó",
"oops": "Hoppá",
"suggestFeatures": "Funkció ajánlása",
"faq": "GY. I. K.",
"somethingWentWrongMessage": "Hiba történt. Kérjük, próbálkozzon újra",
"leaveFamily": "Családi előfizetés elhagyása",
"leaveFamilyMessage": "Biztosan elhagyja a családi előfizetést?",
"inFamilyPlanMessage": "Családi előfizetés!",
"hintForMobile": "Hosszú nyomvatartással a kód szerkeszthető vagy törölhető",
"hintForDesktop": "Jobb egérgomb kattintással a kód szerkeszthető vagy törölhető",
"scan": "Beolvasás",
"scanACode": "QR kód beolvasása",
"verify": "Hitelesítés",
"verifyEmail": "E-mail cím megerősítése",
"enterCodeHint": "Írja be a 6 számjegyű kódot a hitelesítő alkalmazásból",
"lostDeviceTitle": "Elveszett a készüléked?",
"twoFactorAuthTitle": "Kétlépcsős hitelesítés (2FA)",
"passkeyAuthTitle": "Álkulcs megerősítése",
"verifyPasskey": "Erősítse meg az álkulcsot",
"loginWithTOTP": "Bejelentkezés TOTP-vel",
"recoverAccount": "Fiók visszaállítása",
"enterRecoveryKeyHint": "Visszaállító kód megadása",
"recover": "Visszaállít",
"contactSupportViaEmailMessage": "Kürjük küldjön egy e-mailt a fiók regisztrálásakor megadott címről a következőre címre: {email}",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"invalidQRCode": "Érvénytelen QR-kód",
"noRecoveryKeyTitle": "Nincs helyreállítási kulcs?",
"enterEmailHint": "Adja meg az e-mail címét",
"invalidEmailTitle": "Érvénytelen e-mail cím",
"invalidEmailMessage": "Kérjük, adjon meg egy érvényes e-mail címet.",
"deleteAccount": "Fiók törlése",
"deleteAccountQuery": "Szomorúan tapasztaljuk. Problémába ütköztél?",
"yesSendFeedbackAction": "Igen, visszajelzés küldése",
"noDeleteAccountAction": "Fiók végleges törlése",
"initiateAccountDeleteTitle": "Kérjük, hitelesítse magát a fiók törlésének kezdeményezéséhez",
"sendEmail": "E-mail küldése",
"createNewAccount": "Új fiók létrehozása",
"weakStrength": "Gyenge",
"strongStrength": "Erős",
"moderateStrength": "Mérsékelt",
"confirmPassword": "Jelszó megerősítése",
"close": "Bezárás",
"oopsSomethingWentWrong": "Hoppá! Valami hiba történt.",
"selectLanguage": "Nyelv kiválasztása",
"language": "Nyelv",
"social": "Közösségi",
"security": "Biztonság",
"lockscreen": "Záróképernyő",
"authToChangeLockscreenSetting": "A zárképernyő beállításainak módosításához hitelesítsen",
"deviceLockEnablePreSteps": "Az eszközzár engedélyezéséhez állítsa be az eszköz jelszavát vagy a zárképernyőt a rendszerbeállításokban.",
"viewActiveSessions": "Aktív munkamenetek megtekintése",
"authToViewYourActiveSessions": "Az aktív munkamenetek megtekintéséhez hitelesítse magát",
"searchHint": "Keresés...",
"search": "Keresés",
"sorryUnableToGenCode": "Elnézést a kód generálása nem sikerült következőhöz: {issuerName}",
"noResult": "Nincs eredmény",
"addCode": "Kód hozzáadása",
"scanAQrCode": "QR kód beolvasása",
"enterDetailsManually": "Írd be az adatokat",
"edit": "Szerkesztés",
"share": "Megosztás",
"shareCodes": "Kódok megosztása",
"shareCodesDuration": "Válassza ki a kódok megosztásának időtartamát.",
"restore": "Visszaállítás",
"copiedToClipboard": "Másolva vágólapra",
"copiedNextToClipboard": "A kód a vágólapra másolva",
"error": "Hiba",
"recoveryKeyCopiedToClipboard": "A helyreállítási kulcs a vágólapra másolva",
"recoveryKeyOnForgotPassword": "Ha elfelejti jelszavát, csak ezzel a kulccsal tudja visszaállítani adatait.",
"recoveryKeySaveDescription": "Ezt a kulcsot nem tároljuk, kérjük, őrizze meg ezt a 24 szavas kulcsot egy biztonságos helyen.",
"doThisLater": "Később",
"saveKey": "Mentés",
"save": "Mentés",
"send": "Küldés",
"saveOrSendDescription": "El szeretné menteni ezt a tárhelyére (alapértelmezés szerint a Letöltések mappába), vagy elküldi más alkalmazásoknak?",
"saveOnlyDescription": "El szeretné menteni ezt a tárhelyére (alapértelmezés szerint a Letöltések mappába)?",
"back": "Vissza",
"createAccount": "Jelszó erőssége:",
"passwordStrength": "Jelszó erőssége: {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": "Jelszó",
"signUpTerms": "Elfogadom az <u-terms>szolgáltatási feltételeket</u-terms> és az <u-policy>adatvédelmi irányelveket</u-policy>",
"privacyPolicyTitle": "Adatvédelmi irányelvek",
"termsOfServicesTitle": "Használati feltételek",
"encryption": "Titkosítás",
"setPasswordTitle": "Jelszó beállítás",
"changePasswordTitle": "Jelszó módosítás",
"resetPasswordTitle": "Jelszó visszaállítás",
"encryptionKeys": "Titkosító kulcsok",
"passwordWarning": "Ezt a jelszót nem tároljuk, így ha elfelejti, <underline>nem tudjuk visszafejteni adatait</underline>",
"enterPasswordToEncrypt": "Adjon meg egy jelszót, amellyel titkosíthatjuk adatait",
"enterNewPasswordToEncrypt": "Adjon meg egy új jelszót, amellyel titkosíthatjuk adatait",
"passwordChangedSuccessfully": "A jelszó sikeresen meg lett változtatva",
"generatingEncryptionKeys": "Titkosító kulcsok generálása...",
"continueLabel": "Folytatás",
"insecureDevice": "Nem biztonságos eszköz",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Sajnáljuk, nem tudtunk biztonságos kulcsokat generálni ezen az eszközön.\n\nkérjük, regisztráljon egy másik eszközről.",
"howItWorks": "Hogyan működik",
"ackPasswordLostWarning": "Tudomásul veszem, hogy ha elveszítem a jelszavamat, elveszíthetem az adataimat, mivel adataim <underline>végponttól végpontig titkosítva vannak</underline>.",
"loginTerms": "A bejelentkezés gombra kattintva elfogadom az <u-terms>szolgáltatási feltételeket</u-terms> és az <u-policy>adatvédelmi irányelveket</u-policy>",
"logInLabel": "Bejelentkezés",
"logout": "Kijelentkezés",
"areYouSureYouWantToLogout": "Biztos benne, hogy kijelentkezik?",
"yesLogout": "Igen, kijelentkezés",
"exit": "Kilépés",
"theme": "Kinézet",
"lightTheme": "Világos",
"darkTheme": "Sötét",
"systemTheme": "Rendszer",
"verifyingRecoveryKey": "Helyreállítási kulcs ellenőrzése...",
"recoveryKeyVerified": "A helyreállítási kulcs ellenőrizve",
"recoveryKeySuccessBody": "Nagyszerű! A helyreállítási kulcs érvényes. Köszönjük az igazolást.\n\nNe felejtsen el biztonsági másolatot készíteni helyreállítási kulcsáról.",
"invalidRecoveryKey": "A megadott helyreállítási kulcs érvénytelen. Kérjük, győződjön meg róla, hogy 24 szót tartalmaz, és ellenőrizze mindegyik helyesírását.\n\nHa régebbi helyreállítási kódot adott meg, győződjön meg arról, hogy az 64 karakter hosszú, és ellenőrizze mindegyiket.",
"recreatePasswordTitle": "Új jelszó létrehozása",
"recreatePasswordBody": "A jelenlegi eszköz nem elég erős a jelszavának ellenőrzéséhez, de újra tudjuk úgy generálni, hogy az minden eszközzel működjön.\n\nKérjük, jelentkezzen be helyreállítási kulcsával, és állítsa be újra jelszavát (ha szeretné, újra használhatja ugyanazt).",
"invalidKey": "Érvénytelen kulcs",
"tryAgain": "Próbáld újra",
"viewRecoveryKey": "Helyreállítási kulcs megtekintése",
"confirmRecoveryKey": "Helyreállítási kulcs megerősítése",
"recoveryKeyVerifyReason": "A helyreállítási kulcs az egyetlen módja annak, hogy visszaállítsa fényképeit, ha elfelejti jelszavát. A helyreállítási kulcsot a Beállítások > Fiók menüpontban találhatja meg.\n\nKérjük, írja be ide helyreállítási kulcsát annak ellenőrzéséhez, hogy megfelelően mentette-e el.",
"confirmYourRecoveryKey": "Erősítse meg helyreállítási kulcsát",
"confirm": "Megerősítés",
"emailYourLogs": "E-mailben küldje el naplóit",
"pleaseSendTheLogsTo": "Kérjük, küldje el a naplókat erre az e-mail címre\n{toEmail}",
"copyEmailAddress": "E-mail cím másolása",
"exportLogs": "Naplófájlok exportálása",
"enterYourRecoveryKey": "Adja meg helyreállítási kulcsát",
"tempErrorContactSupportIfPersists": "Úgy tűnik, valami hiba történt. Kérjük, próbálja újra egy idő után. Ha a hiba továbbra is fennáll, forduljon ügyfélszolgálatunkhoz.",
"networkHostLookUpErr": "Nem lehet csatlakozni az Ente-hez. Kérjük, ellenőrizze a hálózati beállításokat, és ha a hiba továbbra is fennáll, forduljon az ügyfélszolgálathoz.",
"networkConnectionRefusedErr": "Nem lehet csatlakozni az Ente-hez, próbálja újra egy idő után. Ha a hiba továbbra is fennáll, forduljon az ügyfélszolgálathoz.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Úgy tűnik, valami hiba történt. Kérjük, próbálja újra egy idő után. Ha a hiba továbbra is fennáll, forduljon ügyfélszolgálatunkhoz.",
"about": "Rólunk",
"weAreOpenSource": "Nyílt forráskódúak vagyunk!",
"privacy": "Adatvédelem",
"terms": "Feltételek",
"checkForUpdates": "Frissítések ellenőrzése",
"checkStatus": "Állapot ellenőrzése",
"downloadUpdate": "Letöltés",
"criticalUpdateAvailable": "Kritikus frissítés elérhető",
"updateAvailable": "Elérhető frissítés",
"update": "Frissítés",
"checking": "Ellenőrzés...",
"youAreOnTheLatestVersion": "Ön a legújabb verziót használja",
"warning": "Figyelmeztetés",
"exportWarningDesc": "Az exportált fájl bizalmas információkat tartalmaz. Kérjük, tárolja ezt biztonságosan.",
"iUnderStand": "Megértettem",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "A kódok exportálásához hitelesítse magát",
"importSuccessTitle": "Jaj!",
"importSuccessDesc": "{count} kódot importált!",
"@importSuccessDesc": {
"placeholders": {
"count": {
"description": "The number of codes imported",
"type": "int",
"example": "1"
}
}
},
"sorry": "Bocsánat",
"importFailureDesc": "Nem sikerült elemezni a kiválasztott fájlt.\nKérjük, írjon a support@ente.io címre, ha segítségre van szüksége!",
"pendingSyncs": "Figyelmeztetés",
"pendingSyncsWarningBody": "Néhány kódról nem készült biztonsági másolat.\n\nKérjük, győződjön meg arról, hogy van biztonsági másolata ezekről a kódokról, mielőtt kijelentkezik.",
"checkInboxAndSpamFolder": "Kérjük, ellenőrizze beérkező leveleit (és spam mappát) az ellenőrzés befejezéséhez",
"tapToEnterCode": "Koppintson a kód beírásához",
"resendEmail": "E-mail újraküldése",
"weHaveSendEmailTo": "E-mailt küldtünk a következő címre: <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": "Egyéni",
"editOrder": "Sorrend módosítása",
"mostFrequentlyUsed": "Gyakran használt",
"mostRecentlyUsed": "Legutóbb használt",
"activeSessions": "Aktív munkamenetek",
"somethingWentWrongPleaseTryAgain": "Hiba történt. Kérjük, próbálkozz újra",
"thisWillLogYouOutOfThisDevice": "Ezzel kijelentkezik erről az eszközről!",
"thisWillLogYouOutOfTheFollowingDevice": "Ezzel kijelentkezik a következő eszközről:",
"terminateSession": "Megszakítja a munkamenetet?",
"terminate": "Befejezés",
"thisDevice": "Ez az eszköz",
"toResetVerifyEmail": "Jelszava visszaállításához először igazolja e-mail-címét.",
"thisEmailIsAlreadyInUse": "Ez az e-mail már használatban van",
"verificationFailedPleaseTryAgain": "Az ellenőrzés sikertelen, próbálja újra",
"yourVerificationCodeHasExpired": "Ez az ellenőrző kód lejárt",
"incorrectCode": "Helytelen kód",
"sorryTheCodeYouveEnteredIsIncorrect": "Sajnáljuk, a megadott kód helytelen",
"emailChangedTo": "Az e-mail cím módosítva erre: {newEmail}",
"authenticationFailedPleaseTryAgain": "A hitelesítés sikertelen, próbálja újra",
"authenticationSuccessful": "Sikeres hitelesítés!",
"twofactorAuthenticationSuccessfullyReset": "A kétfaktoros hitelesítés visszaállítása sikeres",
"incorrectRecoveryKey": "Helytelen helyreállítási kulcs",
"theRecoveryKeyYouEnteredIsIncorrect": "A megadott helyreállítási kulcs helytelen",
"enterPassword": "Adja meg a jelszót",
"selectExportFormat": "Válasszon exportálási formátumot",
"exportDialogDesc": "A titkosított exportálást az Ön által választott jelszó védi.",
"encrypted": "Titkosított",
"plainText": "Egyszerű szöveg",
"passwordToEncryptExport": "Jelszó az export titkosításához",
"export": "Exportálás",
"useOffline": "Használja biztonsági mentés nélkül",
"signInToBackup": "Jelentkezzen be a kódok biztonsági mentéséhez",
"singIn": "Jelentkezzen be",
"sigInBackupReminder": "Kérjük, exportálja a kódjait, hogy biztosan rendelkezzen biztonsági másolattal, amelyből visszaállíthatja.",
"offlineModeWarning": "Úgy döntött, hogy biztonsági mentés nélkül folytatja. Kérjük, készítsen manuális biztonsági másolatot a kódok biztonsága érdekében.",
"showLargeIcons": "Nagy ikonok megjelenítése",
"compactMode": "Kompakt mód",
"shouldHideCode": "Kódok elrejtése",
"doubleTapToViewHiddenCode": "A kód megtekintéséhez koppintson duplán egy bejegyzésre",
"focusOnSearchBar": "A keresésre fókuszálás az alkalmazás indításakor",
"confirmUpdatingkey": "Biztosan frissíteni szeretné a titkos kulcsot?",
"minimizeAppOnCopy": "Alkalmazás kicsinyítése másoláskor",
"editCodeAuthMessage": "Hitelesítés a kód szerkesztéséhez",
"deleteCodeAuthMessage": "Hitelesítés a kód törléséhez",
"showQRAuthMessage": "Hitelesítés a QR kód megjelenítéséhez",
"confirmAccountDeleteTitle": "Fiók törlésének megerősítése",
"confirmAccountDeleteMessage": "",
"androidBiometricHint": "Személyazonosság ellenőrzése",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "Nem felismerhető. Próbáld újra.",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "Sikeres",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "Mégse",
"@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": "Hitelesítés szükséges",
"@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": "Biometria szükséges",
"@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": "Az eszköz hitelesítő adatai szükségesek",
"@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": "Az eszköz hitelesítő adatai szükségesek",
"@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": "Beállítások megnyitása",
"@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": "A biometrikus hitelesítés nincs beállítva az eszközön. A biometrikus hitelesítés hozzáadásához lépjen a 'Beállítások > Biztonság' menüpontra.",
"@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": "A biometrikus hitelesítés ki van kapcsolva. Az engedélyezéséhez zárja le és oldja fel a képernyőt.",
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
"iOSGoToSettingsDescription": "A biometrikus hitelesítés nincs beállítva az eszközön. Kérjük, engedélyezze telefonon a Touch ID-t vagy a Face ID-t.",
"@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": "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": "Nincs internet kapcsolat",
"pleaseCheckYourInternetConnectionAndTryAgain": "Kérjük, ellenőrizze az internetkapcsolatát, és próbálja meg újra.",
"signOutFromOtherDevices": "Jelentkezzen ki más eszközökről",
"signOutOtherBody": "Ha úgy gondolja, hogy valaki ismeri jelszavát, kényszerítheti a fiókját használó összes többi eszközt a kijelentkezésre.",
"signOutOtherDevices": "Jelentkezzen ki a többi eszközről",
"doNotSignOut": "Ne jelentkezzen ki",
"hearUsWhereTitle": "Honnan hallottál Ente-ről? (opcionális)",
"hearUsExplanation": "Nem követjük nyomon az alkalmazástelepítéseket. Segítene, ha elmondaná, hol talált ránk!",
"recoveryKeySaved": "A helyreállítási kulcs a Letöltések mappába mentve!",
"waitingForBrowserRequest": "Várakozás a böngészőkérésre...",
"waitingForVerification": "Várakozás az ellenőrzésre...",
"passkey": "Passkey",
"passKeyPendingVerification": "Az ellenőrzés még függőben van",
"loginSessionExpired": "Lejárt a munkamenet",
"loginSessionExpiredDetails": "A munkameneted lejárt. Kérem lépjen be újra.",
"developerSettingsWarning": "Biztos benne, hogy módosítani szeretné a fejlesztői beállításokat?",
"developerSettings": "Fejlesztői beállítások",
"serverEndpoint": "Szerver végpont",
"invalidEndpoint": "Érvénytelen végpont",
"invalidEndpointMessage": "Sajnáljuk, a megadott végpont érvénytelen. Adjon meg egy érvényes végpontot, és próbálja újra.",
"endpointUpdatedMessage": "A végpont sikeresen frissítve",
"customEndpoint": "Csatlakozva a következőhöz: {endpoint}",
"pinText": "Rögzítés",
"unpinText": "Rögzítés feloldása",
"pinnedCodeMessage": "A {code} rögzítve",
"unpinnedCodeMessage": "A {code} rögzítése feloldva",
"pinned": "Kitűzött",
"tags": "Címkék",
"createNewTag": "Új címke létrehozása",
"tag": "Címke",
"create": "Létrehozás",
"editTag": "Címke szerkesztése",
"deleteTagTitle": "Címke törlése?",
"deleteTagMessage": "Biztosan törli ezt a címkét? Ez a művelet visszafordíthatatlan.",
"somethingWentWrongParsingCode": "Nem tudtunk elemezni {x} kódot.",
"updateNotAvailable": "Nem érhető el frissítés",
"viewRawCodes": "Nyers kódok megtekintése",
"rawCodes": "Nyers kód",
"rawCodeData": "Nyers kód adatok",
"appLock": "Alkalmazások zárolása",
"noSystemLockFound": "Nem található rendszerzár",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Az alkalmazászár engedélyezéséhez állítsa be az eszköz jelszavát vagy a képernyőzárat a rendszerbeállításokban.",
"autoLock": "Automatikus lezárás",
"immediately": "Azonnal",
"reEnterPassword": "Írja be újra a jelszót",
"reEnterPin": "Írja be újra a PIN-kódot",
"next": "Következő",
"tooManyIncorrectAttempts": "Túl sok helytelen próbálkozás",
"tapToUnlock": "Koppintson a feloldáshoz",
"setNewPassword": "Új jelszó beállítása",
"deviceLock": "Eszköz lezárás",
"hideContent": "Tartalom elrejtése",
"hideContentDescriptionAndroid": "Elrejti az alkalmazás tartalmát az alkalmazásváltóban, és letiltja a képernyőképeket",
"hideContentDescriptioniOS": "Elrejti az alkalmazás tartalmát az alkalmazásváltóban",
"autoLockFeatureDescription": "Az az idő, amely elteltével az alkalmazás zárolásra kerül, miután a háttérbe került",
"appLockDescription": "Válasszon az eszköz alapértelmezett zárolási képernyője és a PIN-kóddal vagy jelszóval rendelkező egyéni zárolási képernyő között.",
"pinLock": "PIN feloldás",
"enterPin": "PIN kód megadása",
"setNewPin": "Új PIN kód beállítása",
"importFailureDescNew": "Nem sikerült elemezni a kiválasztott fájlt.",
"appLockNotEnabled": "Az alkalmazászár nincs engedélyezve",
"appLockNotEnabledDescription": "A passkey megtekintéséhez kérjük, hitelesítse magát",
"authToViewPasskey": "A jelszó megtekintéséhez kérjük, hitelesítse magát",
"appLockOfflineModeWarning": "Úgy döntött, hogy biztonsági mentés nélkül folytatja. Ha elfelejti az alkalmazászárat, akkor nem férhet hozzá adataihoz.",
"duplicateCodes": "Ismétlődő kódok",
"noDuplicates": "✨Nincs ismétlődés",
"youveNoDuplicateCodesThatCanBeCleared": "Nincsenek ismétlődő kódjai, amelyeket törölni lehetne",
"deduplicateCodes": "Ismétlődő kódok",
"deselectAll": "Összes kijelölés megszüntetése",
"selectAll": "Összes kijelölése",
"deleteDuplicates": "Ismétlődések törlése",
"plainHTML": "Sima HTML kód"
}

View File

@@ -1,16 +1,16 @@
{
"account": "Akun\n",
"account": "Akun",
"unlock": "Buka",
"recoveryKey": "Kunci pemulihan",
"counterAppBarTitle": "Pencacah",
"counterAppBarTitle": "Penghitung",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Cadangkan kode autentikasi 2 langkah Anda dengan aman",
"onBoardingBody": "Cadangkan kode 2FA Anda dengan aman",
"onBoardingGetStarted": "Mulai",
"setupFirstAccount": "Siapkan akun pertama Anda",
"importScanQrCode": "Pindai Kode Respons Cepat (QR)",
"qrCode": "Kode Respons Cepat (QR)",
"importScanQrCode": "Pindai Kode QR",
"qrCode": "Kode QR",
"importEnterSetupKey": "Masukkan kunci penyiapan",
"importAccountPageTitle": "Masukkan rincian akun",
"secretCanNotBeEmpty": "Rahasia tidak boleh kosong",
@@ -22,7 +22,7 @@
"secret": "Rahasia",
"all": "Semua",
"notes": "Catatan",
"notesLengthLimit": "Banyaknya karakter pada catatan yang diperbolehkan paling banyak adalah sebanyak {count} karakter",
"notesLengthLimit": "Catatan dapat memiliki panjang maksimal {count} karakter",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
@@ -33,29 +33,29 @@
}
}
},
"codeAccountHint": "Akun (nama@domain.com)",
"codeAccountHint": "Akun (anda@domain.com)",
"codeTagHint": "Tag",
"accountKeyType": "Jenis kunci",
"sessionExpired": "Sesi berakhir",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Silakan masuk akun lagi",
"loggingOut": "Keluar dari akun...",
"pleaseLoginAgain": "Silakan masuk lagi",
"loggingOut": "Mengeluarkan akun...",
"timeBasedKeyType": "Berbasis waktu (TOTP)",
"counterBasedKeyType": "Berbasis pencacah (HOTP)",
"counterBasedKeyType": "Berbasis Penghitung (HOTP)",
"saveAction": "Simpan",
"nextTotpTitle": "berikutnya",
"deleteCodeTitle": "Hapus kode?",
"deleteCodeMessage": "Anda yakin ingin menghapus kode ini? Tindakan ini tidak dapat dikembalikan ke semula.",
"deleteCodeMessage": "Apakah Anda yakin ingin menghapus kode ini? Tindakan ini tidak dapat dibatalkan.",
"trashCode": "Hapus kode?",
"trashCodeMessage": "Anda yakin ingin menghapus kode untuk akun {account}?",
"trashCodeMessage": "Apakah anda yakin ingin menghapus kode untuk {account}?",
"trash": "Hapus",
"viewLogsAction": "Lihat log",
"sendLogsDescription": "Langkah ini akan mengirimkan log untuk membantu kami menyelesaikan masalah Anda. Kami menyarankan Anda untuk meninjau log-log berikut sebelum dibagikan walaupun kami sudah berupaya untuk memastikan agar segala informasi yang bersifat sensitif tidak terlog.",
"preparingLogsTitle": "Menyiapkan log...",
"emailLogsTitle": "Log surel",
"emailLogsMessage": "Harap kirim log ke {email}",
"viewLogsAction": "Lihat catatan",
"sendLogsDescription": "Ini akan mengirimkan catatan untuk membantu kami memecahkan masalah Anda. Meskipun kami mengambil langkah-langkah untuk memastikan informasi sensitif tidak tercatat, kami menyarankan Anda untuk melihat catatan ini sebelum membagikannya.",
"preparingLogsTitle": "Menyiapkan catatan...",
"emailLogsTitle": "Catatan email",
"emailLogsMessage": "Harap kirim catatan ke {email}",
"@emailLogsMessage": {
"placeholders": {
"email": {
@@ -63,12 +63,12 @@
}
}
},
"copyEmailAction": "Salin surel",
"exportLogsAction": "Ekspor log",
"reportABug": "Laporkan keberadaan kutu",
"crashAndErrorReporting": "Pelaporan Galat dan Kemogokan",
"reportBug": "Laporkan kutu",
"emailUsMessage": "Harap kirimkan surel ke {email}",
"copyEmailAction": "Salin alamat email",
"exportLogsAction": "Ekspor catatan",
"reportABug": "Laporkan bug",
"crashAndErrorReporting": "Pelaporan Kerusakan & Kesalahan",
"reportBug": "Laporkan bug",
"emailUsMessage": "Harap kirim email kepada kami di {email}",
"@emailUsMessage": {
"placeholders": {
"email": {
@@ -76,91 +76,91 @@
}
}
},
"contactSupport": "Hubungi bantuan",
"rateUsOnStore": "Beri kami penilaian di {storeName}",
"contactSupport": "Hubungi dukungan",
"rateUsOnStore": "Nilai kami di {storeName}",
"blog": "Blog",
"merchandise": "Toko kami",
"merchandise": "Merchandise",
"verifyPassword": "Verifikasi kata sandi",
"pleaseWait": "Mohon tunggu...",
"generatingEncryptionKeysTitle": "Membuat kunci enkripsi...",
"generatingEncryptionKeysTitle": "Sedang membuat kunci enkripsi...",
"recreatePassword": "Buat ulang kata sandi",
"recreatePasswordMessage": "Gawai ini tidak cukup mutakhir untuk memverifikasi kata sandi Anda, sehingga kami perlu membuat ulang kata sandi Anda sekali lagi dengan cara yang dapat digunakan di semua perangkat.\n\nSilakan masuk dengan kunci pemulihan dan buat ulang kata sandi Anda (Gunakan kata sandi yang sama lagi jika Anda mau).",
"recreatePasswordMessage": "Perangkat saat ini tidak cukup kuat untuk memverifikasi kata sandi Anda, jadi kami perlu membuat ulang kata sandi Anda dengan cara yang dapat digunakan di semua perangkat.\n\nHarap masuk menggunakan kunci pemulihan Anda dan buat ulang kata sandi Anda (Anda dapat menggunakan yang sama lagi jika diinginkan).",
"useRecoveryKey": "Gunakan kunci pemulihan",
"incorrectPasswordTitle": "Kata sandi salah",
"welcomeBack": "Selamat datang kembali!",
"madeWithLoveAtPrefix": "dibuat dengan ❤️ di ",
"supportDevs": "Berlangganan <bold-green>ente</bold-green> untuk memberikan kami dukungan",
"supportDiscount": "Gunakan kode kupon \"AUTH\" untuk mendapatkan diskon 10% pada tahun Anda berlangganan",
"changeEmail": "Ubah surel",
"supportDevs": "Berlangganan <bold-green>ente</bold-green> untuk mendukung kami",
"supportDiscount": "Gunakan kode kupon \"AUTH\" untuk mendapatkan potongan 10% untuk tahun pertama",
"changeEmail": "Ubah alamat email",
"changePassword": "Ubah kata sandi",
"data": "Data",
"importCodes": "Impor kode",
"importTypePlainText": "Teks biasa",
"importTypeEnteEncrypted": "Eksporan Ente Terenkripsi",
"passwordForDecryptingExport": "Kata sandi untuk mendekripsi eksporan",
"passwordForDecryptingExport": "Kata sandi untuk mendekripsi ekspor",
"passwordEmptyError": "Kata sandi tidak boleh kosong",
"importFromApp": "Impor kode dari {appName}",
"importGoogleAuthGuide": "Ekspor semua akun Anda dari Google Authenticator ke kode respons cepat (QR) dengan pilihan \"Transfer Akun\". Kemudian, pindai kode respons cepat tersebut dengan perangkat lain.\n\nKiat: webcam laptop juga dapat digunakan untuk untuk memindai kode respons cepat.",
"importGoogleAuthGuide": "Ekspor akun Anda dari Google Authenticator ke kode QR menggunakan opsi \"Transfer Akun\". Kemudian, gunakan perangkat lain untuk memindai kode QR tersebut.\n\nTip: Anda bisa menggunakan webcam laptop Anda untuk memotret kode QR.",
"importSelectJsonFile": "Pilih berkas JSON",
"importSelectAppExport": "Pilih berkas eksporan dari {appName}",
"importEnteEncGuide": "Pilih berkas JSON terenkripsi yang telah diekspor dari Ente",
"importRaivoGuide": "Gunakan pilihan \"Export OTPs to Zip archive\" pada pengaturan Raivo.\n\nEkstrak berkas zip dan impor berkas JSON tersebut.",
"importBitwardenGuide": "Gunakan pilihan \"Export vault\" pada Bitwarden Tools dan impor ber JSON yang takterenkripsi.",
"importAegisGuide": "Gunakan pilihan \"Export vault\" pada pengaturan Aegis.\n\nJika brankas terenkripsi, masukkan kata sandi brankas untuk mendekripsi brankas.",
"import2FasGuide": "Gunakan pilihan \"Pengaturan->Cadangkan -Eksport\" pada 2FAS.\n\nJika cadangan Anda dienkripsi, kata sandi akan Anda perlukan untuk mendekripsi cadangan",
"importLastpassGuide": "Gunakan pilihan \"Transfer accounts\" pada pengaturan Lastpass Authenticator dan tekan \"Export accounts to file\". Impor berkas JSON terunduh.",
"exportCodes": "Kode pengeksporan",
"importEnteEncGuide": "Pilih file enkripsi JSON yang telah diekspor dari Ente",
"importRaivoGuide": "Gunakan opsi \"Export OTPs to Zip archive\" pada pengaturan Raivo.\n\nEkstrak file zip dan impor file JSON tersebut.",
"importBitwardenGuide": "Gunakan opsi \"Export vault\" di Bitwarden dan impor file JSON yang tidak terenkripsi.",
"importAegisGuide": "Gunakan opsi \"Export the vault\" di Pengaturan Aegis.\n\nJika brankas Anda terenkripsi, Anda perlu memasukkan kata sandi brankas untuk mendekripsi brankas.",
"import2FasGuide": "Gunakan opsi \"Settings->Backup -Export\" di 2FAS.\n\nJika cadangan Anda terenkripsi, Anda perlu memasukkan kata sandi untuk mendekripsi cadangan",
"importLastpassGuide": "Gunakan opsi \"Transfer accounts\" di Pengaturan Lastpass Authenticator dan tekan \"Export accounts to file\". Impor file JSON yang diunduh.",
"exportCodes": "Ekspor kode",
"importLabel": "Impor",
"importInstruction": "Mohon pilih berkas yang mengandung daftar kode dalam format seperti berikut",
"importCodeDelimiterInfo": "Kode dapat dipisahkan oleh tanda koma atau baris baru",
"importInstruction": "Harap pilih file yang berisi daftar kode Anda dalam format berikut",
"importCodeDelimiterInfo": "Kode dapat dipisahkan dengan koma atau baris baru",
"selectFile": "Pilih file",
"emailVerificationToggle": "Verifikasi surel",
"emailVerificationEnableWarning": "Agar tidak akun Anda tidak terkunci, pastikan simpan salinan pengaturan 2FA surel Anda di luar aplikasi Ente Auth sebelum verifikasi surel Anda nyalakan.",
"authToChangeEmailVerificationSetting": "Mohon autentikasikan untuk mengubah verifikasi surel",
"authenticateGeneric": "Mohon autentikasikan",
"authToViewYourRecoveryKey": "Mohon autentikasikan untuk menampilkan kunci pemulihan",
"authToChangeYourEmail": "Moohn autentikasikan untuk mengubah surel",
"authToChangeYourPassword": "Mohon autentikasikan untuk mengubah kata sandi",
"authToViewSecrets": "Mohon autentikasikan untuk menampilkan RahasiaKu",
"authToInitiateSignIn": "Mohon autentikasikan untuk memulai proses pencadangan.",
"emailVerificationToggle": "Verifikasi email",
"emailVerificationEnableWarning": "Untuk menghindari terkunci dari akun Anda, pastikan untuk menyimpan salinan 2FA email Anda di luar Ente Auth sebelum mengaktifkan verifikasi email.",
"authToChangeEmailVerificationSetting": "Harap lakukan autentikasi untuk mengubah verifikasi email",
"authenticateGeneric": "Harap lakukan autentikasi",
"authToViewYourRecoveryKey": "Harap lakukan autentikasi untuk melihat kunci pemulihan Anda",
"authToChangeYourEmail": "Harap lakukan autentikasi untuk mengubah email Anda",
"authToChangeYourPassword": "Harap lakukan autentikasi untuk mengubah kata sandi Anda",
"authToViewSecrets": "Harap lakukan autentikasi untuk melihat rahasia Anda",
"authToInitiateSignIn": "Harap lakukan autentikasi untuk memulai proses masuk untuk pencadangan.",
"ok": "Oke",
"cancel": "Batal",
"yes": "Ya",
"no": "Tidak",
"email": "Surel",
"support": "Bantuan",
"email": "Email",
"support": "Dukungan",
"general": "Umum",
"settings": "Pengaturan",
"copied": "Disalin",
"pleaseTryAgain": "Mohon coba lagi",
"existingUser": "Pengguna yang Sudah Ada",
"pleaseTryAgain": "Harap coba lagi",
"existingUser": "Pengguna yang ada",
"newUser": "Baru di Ente",
"delete": "Hapus",
"enterYourPasswordHint": "Masukkan kata sandi Anda",
"forgotPassword": "Lupa kata sandi",
"oops": "Aduh",
"oops": "Ups",
"suggestFeatures": "Sarankan fitur",
"faq": "Tanya Jawab Umum",
"faq": "Pertanyaan yang sering ditanyakan",
"somethingWentWrongMessage": "Terjadi kesalahan, silakan coba lagi",
"leaveFamily": "Tinggalkan keluarga",
"leaveFamilyMessage": "Anda yakin sudah tidak ingin berlangganan paket keluarga ini?",
"leaveFamilyMessage": "Apakah Anda yakin sudah tidak ingin berlangganan paket keluarga ini?",
"inFamilyPlanMessage": "Anda sedang berlangganan paket keluarga!",
"hintForMobile": "Tekan lama kode untuk menyunting atau menghapus.",
"hintForDesktop": "Klik kanan kode untuk menyunting atau menghapus.",
"hintForMobile": "Tekan lama kode untuk mengedit atau menghapusnya.",
"hintForDesktop": "Klik kanan kode untuk mengedit atau menghapus.",
"scan": "Pindai",
"scanACode": "Pindai kode",
"verify": "Verifikasi",
"verifyEmail": "Verifikasi email",
"enterCodeHint": "Masukkan kode 6 angka pada aplikasi pengautentikasi Anda",
"enterCodeHint": "Masukkan kode 6 digit dari aplikasi autentikator Anda",
"lostDeviceTitle": "Perangkat hilang?",
"twoFactorAuthTitle": "Autentikasi dua langkah",
"passkeyAuthTitle": "Verifikasi passkey",
"verifyPasskey": "Verifikasi passkey",
"loginWithTOTP": "Login menggunakan TOTP",
"loginWithTOTP": "Masuk menggunakan TOTP",
"recoverAccount": "Pulihkan akun",
"enterRecoveryKeyHint": "Masukkan kunci pemulihanmu",
"enterRecoveryKeyHint": "Masukkan kunci pemulihan Anda",
"recover": "Pulihkan",
"contactSupportViaEmailMessage": "Silakan kirimkan surel ke {email} dari alamat surelmu yang terdaftar",
"contactSupportViaEmailMessage": "Harap kirim email ke {email} dari alamat email terdaftar Anda",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
@@ -168,13 +168,13 @@
}
}
},
"invalidQRCode": "Kode QR tidak sah",
"invalidQRCode": "Kode QR tidak valid",
"noRecoveryKeyTitle": "Tidak punya kunci pemulihan?",
"enterEmailHint": "Masukkan alamat surelmu",
"invalidEmailTitle": "Alamat surel tidak sah",
"invalidEmailMessage": "Harap masukkan alamat surel yang sah.",
"enterEmailHint": "Masukkan alamat email Anda",
"invalidEmailTitle": "Alamat email tidak valid",
"invalidEmailMessage": "Harap masukkan alamat email yang valid.",
"deleteAccount": "Hapus akun",
"deleteAccountQuery": "Sayang sekali Anda harus pergi. Apakah ada masalah?",
"deleteAccountQuery": "Kami akan merasa kehilangan Anda. Apakah Anda menghadapi masalah?",
"yesSendFeedbackAction": "Ya, kirim umpan balik",
"noDeleteAccountAction": "Tidak, hapus akun",
"initiateAccountDeleteTitle": "Harap autentikasi untuk memulai penghapusan akun",
@@ -183,37 +183,37 @@
"weakStrength": "Lemah",
"strongStrength": "Kuat",
"moderateStrength": "Sedang",
"confirmPassword": "Konfirmasi sandi",
"confirmPassword": "Konfirmasi kata sandi",
"close": "Tutup",
"oopsSomethingWentWrong": "Ups, sepertinya ada yang salah.",
"oopsSomethingWentWrong": "Ups, Ada yang tidak beres.",
"selectLanguage": "Pilih bahasa",
"language": "Bahasa",
"social": "Sosial",
"security": "Keamanan",
"lockscreen": "Layar kunci",
"authToChangeLockscreenSetting": "Mohon autentikan untuk mengganti pengaturan layar kunci",
"authToChangeLockscreenSetting": "Harap lakukan autentikasi untuk mengubah pengaturan layar kunci",
"deviceLockEnablePreSteps": "Pasang kunci sandi atau kunci layar pada pengaturan sistem untuk menyalakan Pengunci Gawai.",
"viewActiveSessions": "Tampilkan sesi yang aktif",
"authToViewYourActiveSessions": "Mohon autentikasikan untuk menampilkan sesi aktif Anda",
"viewActiveSessions": "Lihat sesi aktif",
"authToViewYourActiveSessions": "Harap lakukan autentikasi untuk melihat sesi aktif Anda",
"searchHint": "Cari...",
"search": "Cari",
"sorryUnableToGenCode": "Maaf, kami tidak dapat membuat kode untuk {issuerName}",
"noResult": "Tiada hasil",
"sorryUnableToGenCode": "Maaf, tidak dapat menghasilkan kode untuk {issuerName}",
"noResult": "Tidak ada hasil",
"addCode": "Tambahkan kode",
"scanAQrCode": "Pindai kode Respons Cepat (QR)",
"scanAQrCode": "Pindai kode QR",
"enterDetailsManually": "Masukkan rincian secara manual",
"edit": "Sunting",
"edit": "Edit",
"share": "Bagikan",
"shareCodes": "Bagikan kode",
"shareCodesDuration": "Pilih durasi untuk membagikan kode.",
"shareCodesDuration": "Pilih durasi untuk berbagi kode.",
"restore": "Pulihkan",
"copiedToClipboard": "Tersalin ke papan klip",
"copiedNextToClipboard": "",
"error": "Galat",
"recoveryKeyCopiedToClipboard": "Kunci pemulihan tersalin ke papan klip",
"recoveryKeyOnForgotPassword": "Jika Anda lupa kata sandi Anda, satu-satunya cara untuk memulihkan data Anda adalah dengan kunci ini.",
"recoveryKeySaveDescription": "Kami tidak menyimpan kunci ini, tolong simpan kunci berisikan 24 kata ini di tempat yang aman.",
"doThisLater": "Nanti saja",
"copiedToClipboard": "Disalin ke papan klip",
"copiedNextToClipboard": "Kode berikutnya telah disalin ke papan klip",
"error": "Kesalahan",
"recoveryKeyCopiedToClipboard": "Kunci pemulihan disalin ke papan klip",
"recoveryKeyOnForgotPassword": "Jika Anda lupa kata sandi, satu-satunya cara memulihkan data Anda adalah dengan kunci ini.",
"recoveryKeySaveDescription": "Kami tidak menyimpan kunci ini, jadi harap simpan kunci yang berisi 24 kata ini dengan aman.",
"doThisLater": "Lakukan lain kali",
"saveKey": "Simpan kunci",
"save": "Simpan",
"send": "Kirim",
@@ -248,7 +248,7 @@
"passwordChangedSuccessfully": "Kata sandi sukses diubah",
"generatingEncryptionKeys": "Sedang membuat kunci enkripsi...",
"continueLabel": "Lanjutkan",
"insecureDevice": "Gawai takaman",
"insecureDevice": "Perangkat tidak aman",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Maaf, kami tidak dapat membuat kunci yang aman pada perangkat ini.\n\nHarap mendaftar dengan perangkat lain.",
"howItWorks": "Cara kerjanya",
"ackPasswordLostWarning": "Saya mengerti bahwa jika saya lupa kata sandi saya, data saya dapat hilang karena data saya <underline>terenkripsi secara end-to-end</underline>.",
@@ -258,6 +258,10 @@
"areYouSureYouWantToLogout": "Anda yakin ingin keluar dari akun ini?",
"yesLogout": "Ya, keluar akun",
"exit": "Keluar",
"theme": "Tema",
"lightTheme": "Terang",
"darkTheme": "Gelap",
"systemTheme": "Sistem",
"verifyingRecoveryKey": "Memverifikasi kunci pemulihan...",
"recoveryKeyVerified": "Kunci pemulihan terverifikasi",
"recoveryKeySuccessBody": "Bagus! Kunci pemulihan ada valid. Terima kasih.\n\nMohon ingat-ingat untuk mencadangkan kunci pemulihan Anda dengan aman.",
@@ -391,7 +395,7 @@
"@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": "Autentikasi",
"androidSignInTitle": "Autentikasi diperlukan",
"@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."
},
@@ -399,15 +403,15 @@
"@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": "Kredensial gawal diperlukan",
"androidDeviceCredentialsRequiredTitle": "Kredensial perangkat diperlukan",
"@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": "Kredensial gawal diperlukan",
"androidDeviceCredentialsSetupDescription": "Kredensial perangkat diperlukan",
"@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": "Ke pengaturan",
"goToSettings": "Pergi ke pengaturan",
"@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."
},
@@ -447,45 +451,56 @@
"serverEndpoint": "Peladen endpoint",
"invalidEndpoint": "Endpoint takvalid",
"invalidEndpointMessage": "Maaf, endpoint yang Anda masukkan takvalid. Mohon masukkan endpoint yang valid, lalu coba kembali.",
"endpointUpdatedMessage": "Endpoint sukses dimutakhirkan",
"customEndpoint": "Terkoneksi ke {endpoint}",
"endpointUpdatedMessage": "Endpoint berhasil diubah",
"customEndpoint": "Terhubung ke {endpoint}",
"pinText": "Sematkan",
"unpinText": "Awasematkan",
"pinnedCodeMessage": "{code} telah disematkan",
"unpinnedCodeMessage": "{code} telah dilepas",
"pinned": "Disematkan",
"tags": "Tanda",
"createNewTag": "Buat Tanda Baru",
"tag": "Tanda",
"create": "Buat",
"editTag": "Sunting tanda",
"editTag": "Ubah tanda",
"deleteTagTitle": "Hapus tanda?",
"deleteTagMessage": "Anda yakin ingin menghapus tanda? Langkah ini tidak akan dapat dikembalikan seperti semula.",
"deleteTagMessage": "Apakah Anda yakin ingin menghapus tanda ini? Tindakan ini tidak dapat dibatalkan.",
"somethingWentWrongParsingCode": "Kode {x} tidak dapat kami urai.",
"updateNotAvailable": "Pemutakhiran tidak tersedia",
"viewRawCodes": "Tampilkan kode mentahan",
"rawCodes": "Kode mentahan",
"rawCodeData": "Data kode mentahan",
"appLock": "Pengunci Apl",
"noSystemLockFound": "Pengunci sistem tidak ditemukan",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Untuk menyalakan Pengunci Apl, mohon pasang kode sandi atau kunci layar di pengaturan sistem gawai Anda",
"autoLock": "Autokunci",
"immediately": "Dengan segera",
"updateNotAvailable": "Pembaruan tidak tersedia",
"viewRawCodes": "Lihat kode mentah",
"rawCodes": "Kode mentah",
"rawCodeData": "Data kode mentah",
"appLock": "Kunci aplikasi",
"noSystemLockFound": "Tidak ditemukan kunci sistem",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Untuk mengaktifkan kunci aplikasi, harap atur kode sandi perangkat atau kunci layar di pengaturan sistem Anda.",
"autoLock": "Kunci otomatis",
"immediately": "Segera",
"reEnterPassword": "Masukkan kembali kata sandi",
"reEnterPin": "Masukkan kembali PIN",
"next": "Selanjutnya",
"tooManyIncorrectAttempts": "Terlalu banyak percobaan yang salah",
"tapToUnlock": "Ketuk untuk membuka",
"setNewPassword": "Pasang kata sandi baru",
"deviceLock": "Pengunci bawaan gawai",
"deviceLock": "Kunci perangkat",
"hideContent": "Sembunyikan isi",
"hideContentDescriptionAndroid": "Sembunyikan isi aplikasi pada pengganti apl dan matikan penangkap layar",
"hideContentDescriptioniOS": "Sembunyikan isi aplikasi di pengganti apl",
"hideContentDescriptionAndroid": "Menyembunyikan konten aplikasi di pemilih aplikasi dan menonaktifkan tangkapan layar",
"hideContentDescriptioniOS": "Menyembunyikan konten aplikasi di pemilih aplikasi",
"autoLockFeatureDescription": "Durasi waktu aplikasi akan terkunci setelah aplikasi ditutup",
"appLockDescription": "Pilih layar kunci bawaan gawai Anda ATAU layar kunci kustom dengan PIN atau kata sandi.",
"pinLock": "PIN",
"enterPin": "Masukkan PIN",
"setNewPin": "Pasang PIN yang baru",
"importFailureDescNew": "Berkas yang dipilih tidak dapat diurai",
"appLockNotEnabled": "Pengunci Apl tidak dinyalakan",
"appLockNotEnabled": "Kunci aplikasi tidak diaktifkan",
"appLockNotEnabledDescription": "Mohon nyalakan pengunci apl di Keamanan > Pengunci Apl",
"authToViewPasskey": "Mohon autentikasikan untuk menampilkan kunci sandi",
"appLockOfflineModeWarning": "Anda telah memilih untuk mengunci aplikasi tanpa cadangan apa pun. Jika Anda lupa kode Pengunci Apl Anda, Anda tidak akan dapat mengakses data-data Anda."
"appLockOfflineModeWarning": "Anda telah memilih untuk mengunci aplikasi tanpa cadangan apa pun. Jika Anda lupa kode Pengunci Apl Anda, Anda tidak akan dapat mengakses data-data Anda.",
"duplicateCodes": "Kode duplikat",
"noDuplicates": "✨ Tak ada duplikat",
"youveNoDuplicateCodesThatCanBeCleared": "Kamu tidak memiliki kode duplikat yang dapat dihapus",
"deduplicateCodes": "Hapus kode duplikat",
"deselectAll": "Batalkan semua pilihan",
"selectAll": "Pilih semua",
"deleteDuplicates": "Hapus duplikat",
"plainHTML": "HTML Sederhana"
}

View File

@@ -258,6 +258,10 @@
"areYouSureYouWantToLogout": "Sei sicuro di volerti disconnettere?",
"yesLogout": "Si, effettua la disconnessione",
"exit": "Esci",
"theme": "Tema",
"lightTheme": "Chiaro",
"darkTheme": "Scuro",
"systemTheme": "Sistema",
"verifyingRecoveryKey": "Verifica della chiave di recupero...",
"recoveryKeyVerified": "Chiave di recupero verificata",
"recoveryKeySuccessBody": "Ottimo! La tua chiave di recupero è valida. Grazie per averla verificata.\n\nRicordati di effettuare il backup sicuro della tua chiave di recupero.",
@@ -497,5 +501,6 @@
"deduplicateCodes": "Codici deduplicati",
"deselectAll": "Deselezionare tutti",
"selectAll": "Seleziona tutti",
"deleteDuplicates": "Elimina i duplicati"
"deleteDuplicates": "Elimina i duplicati",
"plainHTML": "HTML semplice"
}

View File

@@ -12,7 +12,7 @@
"importScanQrCode": "QR 코드 스캔하기",
"qrCode": "QR 코드",
"importEnterSetupKey": "설정 키 입력",
"importAccountPageTitle": "계정 상세 정보 입력",
"importAccountPageTitle": "계정 상세정보 입력",
"secretCanNotBeEmpty": "비밀 키는 비워둘 수 없습니다",
"bothIssuerAndAccountCanNotBeEmpty": "발행인과 계정을 모두 비워둘 수 없습니다",
"incorrectDetails": "세부 정보가 잘못 됨",
@@ -22,7 +22,7 @@
"secret": "비밀",
"all": "모든 항목",
"notes": "메모",
"notesLengthLimit": "메모는 최대 {count}자까지 적을 수 있습니다",
"notesLengthLimit": "메모는 최대 {count} 자까지 적을 수 있습니다",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
@@ -36,7 +36,7 @@
"codeAccountHint": "계정 (you@domain.com)",
"codeTagHint": "태그",
"accountKeyType": "키 종류",
"sessionExpired": "세션 만료",
"sessionExpired": "세션 만료",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
@@ -52,10 +52,10 @@
"trashCodeMessage": "정말로 {account} 의 코드를 삭제할까요?",
"trash": "휴지통",
"viewLogsAction": "로그 확인",
"sendLogsDescription": "이 로그를 전송하면 문제 해결을 위한 디버에 도움이 됩니다. 민감한 정보가 로그에 기록되지 않도록 주의를 기울이고 있지만, 공유하기 전에 해당 로그를 직접 확인하시기를 권장합니다.",
"sendLogsDescription": "이 로그를 전송하면 문제 해결을 위한 디버에 도움이 됩니다. 민감한 정보가 로그에 기록되지 않도록 주의를 기울이고 있지만, 공유하기 전에 해당 로그를 직접 확인하시기를 권장합니다.",
"preparingLogsTitle": "로그를 준비하는 중...",
"emailLogsTitle": "이메일 로그",
"emailLogsMessage": "{email} 로 로그를 보내주세요",
"emailLogsMessage": "{email} 쪽으로 로그를 보내주세요",
"@emailLogsMessage": {
"placeholders": {
"email": {
@@ -83,12 +83,14 @@
"verifyPassword": "비밀번호 확인",
"pleaseWait": "잠시만 기다려주세요...",
"generatingEncryptionKeysTitle": "암호화 키를 생성하는 중...",
"recreatePassword": "비밀번호 생성",
"recreatePassword": "비밀번호 다시 생성",
"recreatePasswordMessage": "현재 기기는 비밀번호를 확인할 수 있을 만큼 강력하지 않으므로, 모든 기기에서 작동하는 방식으로 비밀번호를 한 번 더 생성해야 합니다. \n\n복구 키를 사용하여 로그인하고 비밀번호를 다시 생성해 주세요. (원하는 경우 동일한 비밀번호를 다시 사용할 수 있습니다)",
"useRecoveryKey": "복구 키 사용",
"incorrectPasswordTitle": "올바르지 않은 비밀번호",
"welcomeBack": "돌아오신 것을 환영합니다!",
"madeWithLoveAtPrefix": "❤️을 담아 만들었습니다 ",
"emailAlreadyRegistered": "이미 등록된 이메일입니다.",
"emailNotRegistered": "등록되지 않은 이메일입니다.",
"madeWithLoveAtPrefix": "❤️을 담아 만들었습니다 ",
"supportDevs": "<bold-green>ente</bold-green>를 구독하고 저희를 지원해주세요",
"supportDiscount": "쿠폰 코드 \"AUTH\"를 사용하고 첫 해 10% 할인 혜택을 받으세요",
"changeEmail": "이메일 변경",
@@ -97,18 +99,18 @@
"importCodes": "코드 가져오기",
"importTypePlainText": "일반 텍스트",
"importTypeEnteEncrypted": "Ente로 암호화된 내보내기",
"passwordForDecryptingExport": "복호화 비밀번호",
"passwordForDecryptingExport": "복호화시 이용할 비밀번호",
"passwordEmptyError": "비밀번호는 비어있을 수 없습니다",
"importFromApp": "{appName}로부터 코드 불러오기",
"importGoogleAuthGuide": "Google 인증기에서 \"계정 이전\" 옵션을 선택해 생성된 QR 코드를 이용해 계정을 옮길 수 있습니다. 그 다음, 다른 디바이스를 이용하여 QR 코드를 스캔해주세요.\n\n힌트: 웹캠을 이용해 QR 코드를 촬영할 수 있습니다.",
"importGoogleAuthGuide": "Google Authenticator에서 \"계정 이전\" 옵션을 선택해 생성된 QR 코드를 이용해 계정을 옮길 수 있습니다. 그 다음, 다른 기기를 이용하여 QR 코드를 촬영해주세요.\n\n힌트: 컴퓨터의 카메라를 이용해 QR 코드를 촬영할 수 있습니다.",
"importSelectJsonFile": "JSON 파일 선택",
"importSelectAppExport": "{appName}의 내보낸 파일 선택하기",
"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 파일을 불러오세요.",
"importLastpassGuide": "Lastpass Authenticator의 설정에서 \"계정 이전하기\" 옵션 중 \"파일로 계정 내보내기\"를 이용하세요. 다운로드 된 JSON 파일을 불러오세요.",
"exportCodes": "코드 내보내기",
"importLabel": "불러오기",
"importInstruction": "다음의 포맷에 맞춰 여러분의 코드가 들어있는 파일을 선택해주세요",
@@ -116,13 +118,13 @@
"selectFile": "파일 선택",
"emailVerificationToggle": "이메일 검증",
"emailVerificationEnableWarning": "계정이 잠겨 손을 쓸 수 없는 상황에 대비하여, 이메일을 검증하기 전 메일로 전송된 Ente Auth의 2차 인증을 별도로 보관해두세요.",
"authToChangeEmailVerificationSetting": "이메일 검증을 변경하시려면 인증절차를 거쳐주세요",
"authenticateGeneric": "인증절차를 거쳐주세요",
"authToViewYourRecoveryKey": "당신의 복구 키를 확인하려면 인증절차를 거쳐주세요",
"authToChangeYourEmail": "이메일을 변경하려면 인증절차를 거쳐주세요",
"authToChangeYourPassword": "암호를 변경하려면 인증절차를 거쳐주세요",
"authToViewSecrets": "비밀 부분을 확인하려면 인증절차를 거쳐주세요",
"authToInitiateSignIn": "백업을 위해 로그인 상태를 초기화하려면 인증절차를 거쳐주세요",
"authToChangeEmailVerificationSetting": "이메일 검증을 변경하시려면 인증 절차를 거쳐주세요",
"authenticateGeneric": "인증 절차를 거쳐주세요",
"authToViewYourRecoveryKey": "당신의 복구 키를 확인하려면 인증 절차를 거쳐주세요",
"authToChangeYourEmail": "이메일을 변경하려면 인증 절차를 거쳐주세요",
"authToChangeYourPassword": "암호를 변경하려면 인증 절차를 거쳐주세요",
"authToViewSecrets": "비밀 부분을 확인하려면 인증 절차를 거쳐주세요",
"authToInitiateSignIn": "백업을 위해 로그인 상태를 초기화하려면 인증 절차를 거쳐주세요",
"ok": "확인",
"cancel": "취소",
"yes": "네",
@@ -142,16 +144,16 @@
"suggestFeatures": "기능 제안",
"faq": "FAQ",
"somethingWentWrongMessage": "뭔가 잘못된 것 같습니다, 다시 시도해주세요",
"leaveFamily": "패밀리에서 떠나기",
"leaveFamily": "가족 그룹 떠나기",
"leaveFamilyMessage": "가족 요금제에서 떠나시겠습니까?",
"inFamilyPlanMessage": "가족 요금제에 가입하셨습니다!",
"hintForMobile": "수정이나 삭제를 원하시면 코드를 길게 눌러주세요.",
"hintForDesktop": "수정이나 삭제를 원하시면 코드를 클릭해주세요.",
"scan": "스캔하기",
"scanACode": "코드 스캔하기",
"hintForDesktop": "수정이나 삭제를 원하시면 코드를 오른 클릭 해주세요.",
"scan": "촬영",
"scanACode": "코드 촬영",
"verify": "인증",
"verifyEmail": "이메일 인증하기",
"enterCodeHint": "인증기에 적힌 여섯 자리 코드를 입력해주세요",
"enterCodeHint": "Authenticator에 적힌 6 자리 코드를 입력해주세요",
"lostDeviceTitle": "기기를 잃어버리셨나요?",
"twoFactorAuthTitle": "2단계 인증",
"passkeyAuthTitle": "패스키 검증",
@@ -160,7 +162,7 @@
"recoverAccount": "계정 복구",
"enterRecoveryKeyHint": "복구 키를 입력하세요",
"recover": "복구",
"contactSupportViaEmailMessage": "당신이 등록한 이메일 주소에서 {email}로 메일 한 통을 보내주세요",
"contactSupportViaEmailMessage": "당신이 등록한 이메일 주소에서 {email} 쪽으로 메일 한 통을 보내주세요",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
@@ -177,7 +179,7 @@
"deleteAccountQuery": "떠나신다니 아쉽습니다. 뭔가 문제가 있으셨나요?",
"yesSendFeedbackAction": "네, 피드백을 보냅니다",
"noDeleteAccountAction": "아니오, 계정을 지웁니다",
"initiateAccountDeleteTitle": "계정 삭제 절차를 시작하려면 인증절차를 거쳐주세요",
"initiateAccountDeleteTitle": "계정 삭제 절차를 시작하려면 인증 절차를 거쳐주세요",
"sendEmail": "이메일 보내기",
"createNewAccount": "새 계정 만들기",
"weakStrength": "약함",
@@ -188,19 +190,19 @@
"oopsSomethingWentWrong": "이런, 뭔가 꼬였습니다.",
"selectLanguage": "언어 선택",
"language": "언어",
"social": "소셜",
"social": "Social",
"security": "보안",
"lockscreen": "화면 잠금",
"authToChangeLockscreenSetting": "화면 잠금 설정을 변경하시려면 인증절차를 거쳐주세요",
"authToChangeLockscreenSetting": "화면 잠금 설정을 변경하시려면 인증 절차를 거쳐주세요",
"deviceLockEnablePreSteps": "기기 잠금을 활성화하시려면, 기기의 암호를 만들거나 시스템 설정에서 화면 잠금을 설정해주세요.",
"viewActiveSessions": "활성화된 세션 확인하기",
"authToViewYourActiveSessions": "활성화된 세션을 확인하시려면 인증절차를 거쳐주세요",
"viewActiveSessions": "활성화된 Session 확인하기",
"authToViewYourActiveSessions": "활성화된 Session을 확인하시려면 인증 절차를 거쳐주세요",
"searchHint": "검색...",
"search": "찾기",
"sorryUnableToGenCode": "죄송합니다, {issuerName}의 코드를 생성할 수 없습니다",
"sorryUnableToGenCode": "죄송합니다, {issuerName} 의 코드를 생성할 수 없습니다",
"noResult": "결과 없음",
"addCode": "코드 추가하기",
"scanAQrCode": "QR 코드 스캔하기",
"scanAQrCode": "QR 코드 촬영",
"enterDetailsManually": "속성을 수동으로 입력하기",
"edit": "수정",
"share": "공유",
@@ -212,12 +214,12 @@
"error": "에러",
"recoveryKeyCopiedToClipboard": "클립보드에 복구 키 복사 됨",
"recoveryKeyOnForgotPassword": "암호를 잊어버린 경우, 데이터를 복구하려면 이 키를 이용하는 방법 뿐입니다.",
"recoveryKeySaveDescription": "저희는 이 키를 보관하지 않사오니, 여기에 있는 24 단어로 구성된 키를 안전하게 보관해주세요.",
"recoveryKeySaveDescription": "저희는 이 키를 보관하지 않니, 여기에 있는 24 단어로 구성된 키를 안전하게 보관해주세요.",
"doThisLater": "나중에 하기",
"saveKey": "키 저장하기",
"save": "저장",
"send": "보내기",
"saveOrSendDescription": "이것을 당신의 스토리지 (일반적으로 다운로드 폴더) 에 저장하시겠습니까, 아니면 다른 으로 전송하시겠습니까?",
"saveOrSendDescription": "이것을 당신의 스토리지 (일반적으로 다운로드 폴더) 에 저장하시겠습니까, 아니면 다른 App으로 전송하시겠습니까?",
"saveOnlyDescription": "이것을 당신의 스토리지 (일반적으로 다운로드 폴더) 에 저장하시겠습니까?",
"back": "뒤로 가기",
"createAccount": "계정 만들기",
@@ -235,14 +237,14 @@
},
"password": "암호",
"signUpTerms": "나는 <u-terms>사용자 약관</u-terms>과 <u-policy>개인정보 취급방침</u-policy>에 동의합니다.",
"privacyPolicyTitle": "개인정보 취급방침",
"privacyPolicyTitle": "개인정보 취급 방침",
"termsOfServicesTitle": "약관",
"encryption": "암호화",
"setPasswordTitle": "암호 지정",
"changePasswordTitle": "암호 변경",
"resetPasswordTitle": "암호 초기화",
"encryptionKeys": "암호화 키",
"passwordWarning": "저희는 이 암호를 저장하지 않사오니, 만약 잊어버리시게 되면, <underline>데이터를 복호화해드릴 수 없습니다</underline>",
"passwordWarning": "저희는 이 암호를 저장하지 않니, 만약 잊어버리시게 되면, <underline>데이터를 복호화 해드릴 수 없습니다</underline>",
"enterPasswordToEncrypt": "데이터 암호화를 위한 암호 입력",
"enterNewPasswordToEncrypt": "데이터 암호화를 위한 새로운 암호 입력",
"passwordChangedSuccessfully": "암호가 성공적으로 변경되었습니다",
@@ -251,19 +253,23 @@
"insecureDevice": "보안이 허술한 기기",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "죄송합니다, 이 기기에서 보안 키를 생성할 수 없습니다.\n\n다른 기기에서 계정을 생성해주세요.",
"howItWorks": "작동 원리",
"ackPasswordLostWarning": "나는 암호를 분실한 경우, 데이터가 <underline>종단간 암호화</underline>되어있기에 데이터를 손실할 수 있음을 이해합니다.",
"ackPasswordLostWarning": "나는 암호를 분실한 경우, 데이터가 <underline>종단 간 암호화</underline>되어있기에 데이터를 손실할 수 있음을 이해합니다.",
"loginTerms": "로그인을 누름으로써, 나는 <u-terms>사용자 약관</u-terms>과 <u-policy>개인정보 취급방침</u-policy>에 동의합니다.",
"logInLabel": "로그인",
"logout": "로그아웃",
"areYouSureYouWantToLogout": "로그아웃 하시겠습니까?",
"yesLogout": "네, 로그아웃하기",
"exit": "나가기",
"theme": "테마",
"lightTheme": "라이트",
"darkTheme": "어두운",
"systemTheme": "시스템",
"verifyingRecoveryKey": "복구 키 확인 중...",
"recoveryKeyVerified": "복구 키 확인 됨",
"recoveryKeySuccessBody": "좋습니다! 복구 키가 확인되었습니다. 확인 절차를 거쳐주셔서 감사합니다.\n\n잊지 마시고 꼭 복구 키를 안전하게 보관해주세요.",
"invalidRecoveryKey": "입력하신 복구 키가 유효하지 않습니다. 24 단어가 입력됐는지, 그리고 철자가 모두 정확한지 확인해주세요.\n\n구형 복구 코드를 입력하신 경우, 64 자가 맞는지, 그리고 문자가 각각 맞는지 확인해주세요.",
"recreatePasswordTitle": "암호 생성",
"recreatePasswordBody": "현재 사용 중인 기기는 암호를 확인하기에 적합하지 않으나, 모든 기기에서 작동하는 방식으로 비밀번호를 생성할 수 있습니다.\n\n복구 키를 사용하여 로그인하고 암호를 생성해주세요. (원하시면 현재 사용 중인 암호와 같은 암호를 사용하실 수 있습니다.)",
"recreatePasswordTitle": "암호 다시 생성",
"recreatePasswordBody": "현재 사용 중인 기기는 암호를 확인하기에 적합하지 않으나, 모든 기기에서 작동하는 방식으로 비밀번호를 다시 생성할 수 있습니다.\n\n복구 키를 사용하여 로그인하고 암호를 다시 생성해주세요. (원하시면 현재 사용 중인 암호와 같은 암호를 다시 사용하실 수 있습니다.)",
"invalidKey": "유효하지 않은 키",
"tryAgain": "다시 시도해주세요",
"viewRecoveryKey": "복구 키 보기",
@@ -272,7 +278,7 @@
"confirmYourRecoveryKey": "복구 키 확인",
"confirm": "확인",
"emailYourLogs": "로그를 이메일로 보내기",
"pleaseSendTheLogsTo": "이 로그를 {toEmail}으로 보내주세요",
"pleaseSendTheLogsTo": "이 로그를 {toEmail}으로 보내주세요",
"copyEmailAddress": "이메일 주소 복사",
"exportLogs": "로그 내보내기",
"enterYourRecoveryKey": "복구 키를 입력하세요",
@@ -298,8 +304,8 @@
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "코드를 내보내려면 인증절차를 거쳐주세요",
"importSuccessTitle": "호!",
"authToExportCodes": "코드를 내보내려면 인증 절차를 거쳐주세요",
"importSuccessTitle": "호!",
"importSuccessDesc": "코드 {count} 개를 내보내셨습니다!",
"@importSuccessDesc": {
"placeholders": {
@@ -313,11 +319,11 @@
"sorry": "죄송합니다",
"importFailureDesc": "선택하신 파일을 분석할 수 없습니다.\n도움이 필요하시다면 support@ente.io로 문의해주세요.",
"pendingSyncs": "경고",
"pendingSyncsWarningBody": "코드 몇 개가 백업되어있지 않습니다.\n\n로그아웃하기 전 해당 코드들을 백업하셨는지 확인해주세요.",
"checkInboxAndSpamFolder": "검증을 위해 메일 보관함 (또는 스팸함) 확인해주세요",
"pendingSyncsWarningBody": "코드 몇 개가 백업 되어있지 않습니다.\n\n로그아웃하기 전 해당 코드들을 백업하셨는지 확인해주세요.",
"checkInboxAndSpamFolder": "검증을 위해 메일 보관함 (또는 스팸 메일 보관함) 확인해주세요",
"tapToEnterCode": "눌러서 코드 입력하기",
"resendEmail": "이메일 다시 보내기",
"weHaveSendEmailTo": "<green>{email}</green>으로 메일을 보냈습니다",
"weHaveSendEmailTo": "<green>{email}</green>으로 메일을 보냈습니다",
"@weHaveSendEmailTo": {
"description": "Text to indicate that we have sent a mail to the user",
"placeholders": {
@@ -332,7 +338,7 @@
"editOrder": "순서 변경",
"mostFrequentlyUsed": "자주 사용됨",
"mostRecentlyUsed": "최근에 사용됨",
"activeSessions": "활성화된 세션",
"activeSessions": "활성화된 Session",
"somethingWentWrongPleaseTryAgain": "뭔가 잘못됐습니다, 다시 시도해주세요",
"thisWillLogYouOutOfThisDevice": "이 작업을 하시면 기기에서 로그아웃하게 됩니다!",
"thisWillLogYouOutOfTheFollowingDevice": "이 작업을 하시면 다음 기기에서 로그아웃하게 됩니다:",
@@ -471,24 +477,32 @@
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "어플 잠금을 활성화하시려면, 기기의 암호를 만들거나 시스템 설정에서 화면 잠금을 설정해주세요.",
"autoLock": "자동 잠금",
"immediately": "즉시",
"reEnterPassword": "암호 입력",
"reEnterPin": "핀 입력",
"reEnterPassword": "암호 다시 입력",
"reEnterPin": "핀 다시 입력",
"next": "다음",
"tooManyIncorrectAttempts": "잘못된 시도 횟수가 너무 많습니다",
"tapToUnlock": "잠금을 해제하려면 누르세요",
"setNewPassword": "새 비밀번호 설정",
"deviceLock": "기기 잠금",
"hideContent": "내용 숨기기",
"hideContentDescriptionAndroid": "어플 전환 화면에서 어플의 내용을 숨기고 스크린샷 촬영을 막습니다",
"hideContentDescriptioniOS": "어플 전환 화면에서 어플의 내용을 숨깁니다",
"autoLockFeatureDescription": "어플이 백그라운드로 넘어가고 잠금 처리되기까지의 시간",
"hideContentDescriptionAndroid": "App 전환 화면에서 App의 내용을 숨기고 Screenshot 촬영을 막습니다",
"hideContentDescriptioniOS": "App 전환 화면에서 App의 내용을 숨깁니다",
"autoLockFeatureDescription": "Background로 App 넘어가고 잠기기까지 걸리는 시간",
"appLockDescription": "기본 잠금 화면이나, PIN 번호나 암호를 사용한 사용자 설정 잠금 화면 중에 선택하세요.",
"pinLock": "PIN 잠금",
"pinLock": "Pin 잠금",
"enterPin": "PIN 번호 입력",
"setNewPin": "새 PIN 번호 설정",
"importFailureDescNew": "선택하신 파일을 분석할 수 없습니다.",
"appLockNotEnabled": "어플 잠금 설정되지 않음",
"appLockNotEnabledDescription": "설정 > 어플 잠금에서 어플 잠금을 활성화해주세요",
"authToViewPasskey": "패스키를 보려면 인증절차를 거쳐주세요",
"appLockOfflineModeWarning": "백업 없이 진행하는 것을 선택하셨습니다. 어플 잠금 방법을 잊어버리신 경우, 데이터에 접근하실 수 없게 됩니다."
"appLockNotEnabled": "App 잠금 설정되지 않음",
"appLockNotEnabledDescription": "설정 > App 잠금에서 App 잠금을 활성화해주세요",
"authToViewPasskey": "패스키를 보려면 인증 절차를 거쳐주세요",
"appLockOfflineModeWarning": "백업 없이 진행하는 것을 선택하셨습니다. App 잠금 방법을 잊어버리신 경우, 데이터에 접근하실 수 없게 됩니다.",
"duplicateCodes": "중복된 코드",
"noDuplicates": "✨ 중복 없음",
"youveNoDuplicateCodesThatCanBeCleared": "지울 수 있는 중복 코드가 없습니다",
"deduplicateCodes": "중복된 코드 제거",
"deselectAll": "모두 선택 해제",
"selectAll": "모두 선택",
"deleteDuplicates": "중복 제거",
"plainHTML": "일반 HTML"
}

View File

@@ -88,6 +88,8 @@
"useRecoveryKey": "Naudoti atkūrimo raktą",
"incorrectPasswordTitle": "Neteisingas slaptažodis.",
"welcomeBack": "Sveiki sugrįžę!",
"emailAlreadyRegistered": "El. paštas jau užregistruotas.",
"emailNotRegistered": "El. paštas neregistruotas.",
"madeWithLoveAtPrefix": "sukurta su ❤️ vietoje ",
"supportDevs": "Prenumeruokite <bold-green>„ente“</bold-green>, kad palaikytumėte mus",
"supportDiscount": "Naudokite kupono kodą „AUTH“, kad gautumėte 10 % nuolaida pirmiesiems metams",

View File

@@ -501,5 +501,6 @@
"deduplicateCodes": "Dubbele codes",
"deselectAll": "Alles deselecteren",
"selectAll": "Alles selecteren",
"deleteDuplicates": "Dubbelen verwijderen"
"deleteDuplicates": "Dubbelen verwijderen",
"plainHTML": "Alleen HTML"
}

View File

@@ -88,6 +88,8 @@
"useRecoveryKey": "Użyj kodu odzyskiwania",
"incorrectPasswordTitle": "Nieprawidłowe hasło",
"welcomeBack": "Witaj ponownie!",
"emailAlreadyRegistered": "Adres e-mail jest już zarejestrowany.",
"emailNotRegistered": "Adres e-mail nie jest zarejestrowany.",
"madeWithLoveAtPrefix": "zrobione z ❤️ w ",
"supportDevs": "Subskrybuj <bold-green>ente</bold-green> aby wesprzeć ten projekt.",
"supportDiscount": "Użyj kodu rabatowego \"AUTH\", aby otrzymać 10% rabatu na pierwszy rok",
@@ -495,7 +497,7 @@
"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.",
"duplicateCodes": "Duplikuj kody",
"duplicateCodes": "Zduplikowane kody",
"noDuplicates": "✨ Brak duplikatów",
"youveNoDuplicateCodesThatCanBeCleared": "Nie masz duplikatów kodów, które mogą być wyczyszczone",
"deduplicateCodes": "Deduplikuj kody",

View File

@@ -11,7 +11,7 @@
"setupFirstAccount": "Configure sua primeira conta",
"importScanQrCode": "Escanear QR code",
"qrCode": "QR Code",
"importEnterSetupKey": "Insira uma chave de configuração",
"importEnterSetupKey": "Inserir chave de config.",
"importAccountPageTitle": "Inserir detalhes da conta",
"secretCanNotBeEmpty": "A chave secreta não pode estar vazia",
"bothIssuerAndAccountCanNotBeEmpty": "O emissor e a conta não podem estar vazios",
@@ -40,16 +40,16 @@
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Entre novamente",
"loggingOut": "Saindo...",
"pleaseLoginAgain": "Registre-se novamente",
"loggingOut": "Desconectando...",
"timeBasedKeyType": "Baseado no horário (TOTP)",
"counterBasedKeyType": "Baseado no contador (HOTP)",
"saveAction": "Salvar",
"nextTotpTitle": "avançar",
"nextTotpTitle": "próximo",
"deleteCodeTitle": "Excluir código?",
"deleteCodeMessage": "Deseja mesmo excluir este código? Esta ação é irreversível.",
"trashCode": "Excluir código?",
"trashCodeMessage": "Você tem certeza de que quer excluir o código para {account}?",
"trashCodeMessage": "Deseja mesmo excluir o código da {account}?",
"trash": "Excluir",
"viewLogsAction": "Ver registros",
"sendLogsDescription": "Isso compartilhará seus dados para lhe ajudarmos a resolver seu problema. Enquanto tomamos precauções para ter certeza que as informações sensíveis não estejam registradas, nós encorajamos você a visualizar esses dados antes de compartilhá-los.",
@@ -65,7 +65,7 @@
},
"copyEmailAction": "Copiar e-mail",
"exportLogsAction": "Exportar registros",
"reportABug": "Informe um erro",
"reportABug": "Informar erro",
"crashAndErrorReporting": "Relatórios de erros e falhas",
"reportBug": "Informar erro",
"emailUsMessage": "Envie um e-mail para {email}",
@@ -77,7 +77,7 @@
}
},
"contactSupport": "Contatar suporte",
"rateUsOnStore": "Avalies na {storeName}",
"rateUsOnStore": "Avalie-nos na {storeName}",
"blog": "Blog",
"merchandise": "Produtos",
"verifyPassword": "Verificar senha",
@@ -88,8 +88,10 @@
"useRecoveryKey": "Usar chave de recuperação",
"incorrectPasswordTitle": "Senha incorreta",
"welcomeBack": "Bem-vindo(a) de volta!",
"emailAlreadyRegistered": "E-mail já registrado.",
"emailNotRegistered": "E-mail não registrado.",
"madeWithLoveAtPrefix": "feito com ❤️ em ",
"supportDevs": "Inscreva-se no <bold-green>ente</bold-green> para nos apoiar",
"supportDevs": "Inscreva-se no <bold-green>Ente</bold-green> para apoiar-nos",
"supportDiscount": "Use o cupom \"AUTH\" para obter 10% de desconto no primeiro ano",
"changeEmail": "Alterar e-mail",
"changePassword": "Alterar senha",
@@ -112,25 +114,25 @@
"exportCodes": "Exportar códigos",
"importLabel": "Importar",
"importInstruction": "Selecione um arquivo que contenha uma lista de códigos no formato a seguir",
"importCodeDelimiterInfo": "Os códigos podem ser separados por uma vírgula ou uma nova linha",
"importCodeDelimiterInfo": "Códigos podem ser separados por vírgula ou uma nova linha",
"selectFile": "Selecionar arquivo",
"emailVerificationToggle": "Verificação por e-mail",
"emailVerificationEnableWarning": "Para evitar ser bloqueado da sua conta, certifique-se de guardar uma cópia do seu e-mail 2FA fora do Ente Auth antes de ativar a verificação de e-mail.",
"authToChangeEmailVerificationSetting": "Autentique-se para alterar a verificação de e-mail",
"authenticateGeneric": "Autentique",
"authToViewYourRecoveryKey": "Autentique para ver sua chave de recuperação",
"authToChangeYourEmail": "Autentique para alterar o seu e-mail",
"authToChangeYourPassword": "Autentique para alterar sua senha",
"authToViewSecrets": "Autentique para ver suas chaves secretas",
"authToInitiateSignIn": "Autentique para iniciar sessão para fazer uma cópia de segurança.",
"ok": "OK",
"authenticateGeneric": "Autentique-se",
"authToViewYourRecoveryKey": "Autentique-se para ver sua chave de recuperação",
"authToChangeYourEmail": "Autentique-se para alterar o seu e-mail",
"authToChangeYourPassword": "Autentique-se para alterar sua senha",
"authToViewSecrets": "Autentique-se para ver suas chaves secretas",
"authToInitiateSignIn": "Autentique-se para registrar e fazer uma cópia de segurança.",
"ok": "Ok",
"cancel": "Cancelar",
"yes": "Sim",
"no": "Não",
"email": "E-mail",
"support": "Suporte",
"general": "Geral",
"settings": "Ajustes",
"settings": "Opções",
"copied": "Copiado",
"pleaseTryAgain": "Tente novamente",
"existingUser": "Usuário existente",
@@ -151,8 +153,8 @@
"scanACode": "Escanear código",
"verify": "Verificar",
"verifyEmail": "Verificar e-mail",
"enterCodeHint": "Digite o código de 6 dígitos\ndo seu app autenticador",
"lostDeviceTitle": "Perdeu um dispositivo?",
"enterCodeHint": "Insira o código de 6 dígitos do aplicativo autenticador",
"lostDeviceTitle": "Perdeu o dispositivo?",
"twoFactorAuthTitle": "Autenticação de dois fatores",
"passkeyAuthTitle": "Verificação de chave de acesso",
"verifyPasskey": "Verificar chave de acesso",
@@ -177,7 +179,7 @@
"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",
"initiateAccountDeleteTitle": "Autentique-se para iniciar a exclusão de conta",
"sendEmail": "Enviar e-mail",
"createNewAccount": "Criar nova conta",
"weakStrength": "Fraca",
@@ -186,15 +188,15 @@
"confirmPassword": "Confirmar senha",
"close": "Fechar",
"oopsSomethingWentWrong": "Opa. Algo deu errado.",
"selectLanguage": "Trocar idioma",
"selectLanguage": "Alterar idioma",
"language": "Idioma",
"social": "Redes sociais",
"security": "Segurança",
"lockscreen": "Tela de bloqueio",
"authToChangeLockscreenSetting": "Autentique para alterar a opção de tela de bloqueio",
"authToChangeLockscreenSetting": "Autentique-se para alterar a opção da tela de bloqueio",
"deviceLockEnablePreSteps": "Para ativar o bloqueio do dispositivo, configure a senha do dispositivo ou o bloqueio de tela nas configurações do seu sistema.",
"viewActiveSessions": "Ver sessões ativas",
"authToViewYourActiveSessions": "Autentique para ver suas sessões ativas",
"authToViewYourActiveSessions": "Autentique-se para ver suas sessões ativas",
"searchHint": "Buscar...",
"search": "Buscar",
"sorryUnableToGenCode": "Desculpe, não foi possível gerar um código para {issuerName}",
@@ -208,7 +210,7 @@
"shareCodesDuration": "Selecione a duração em que você queira compartilhar os códigos.",
"restore": "Restaurar",
"copiedToClipboard": "Copiado para a área de transferência",
"copiedNextToClipboard": "Próximo código copiado para a área de transferência",
"copiedNextToClipboard": "Copiado próximo código à área de transferência",
"error": "Erro",
"recoveryKeyCopiedToClipboard": "Chave de recuperação copiada para a área de transferência",
"recoveryKeyOnForgotPassword": "Caso esqueça sua senha, a única maneira de recuperar seus dados é com esta chave.",
@@ -217,8 +219,8 @@
"saveKey": "Salvar chave",
"save": "Salvar",
"send": "Enviar",
"saveOrSendDescription": "Deseja mesmo salvar em seu armazenamento (pasta Downloads por padrão) ou enviar para outros apps?",
"saveOnlyDescription": "Deseja mesmo salvar em seu armazenamento (pasta Downloads por padrão)?",
"saveOrSendDescription": "Deseja mesmo salvar isso no armazenamento (pasta de Downloads por padrão) ou enviar a outros aplicativos?",
"saveOnlyDescription": "Deseja mesmo salvar em seu armazenamento (pasta de Downloads por padrão)?",
"back": "Voltar",
"createAccount": "Criar conta",
"passwordStrength": "Força da senha: {passwordStrengthValue}",
@@ -303,7 +305,7 @@
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "Autentique para exportar seus códigos",
"importSuccessTitle": "Oba!",
"importSuccessTitle": "Sucesso!",
"importSuccessDesc": "Você importou {count} códigos!",
"@importSuccessDesc": {
"placeholders": {
@@ -387,7 +389,7 @@
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "Êxito",
"androidBiometricSuccess": "Sucesso",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
@@ -403,15 +405,15 @@
"@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": "Credenciais do dispositivo necessárias",
"androidDeviceCredentialsRequiredTitle": "Credenciais necessários do dispositivo",
"@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": "Credenciais do dispositivo necessárias",
"androidDeviceCredentialsSetupDescription": "Credenciais necessários do dispositivo",
"@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": "Ir para Ajustes",
"goToSettings": "Ir para Opções",
"@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."
},
@@ -438,7 +440,7 @@
"signOutOtherDevices": "Sair em outros dispositivos",
"doNotSignOut": "Não sair",
"hearUsWhereTitle": "Como você descobriu o Ente? (opcional)",
"hearUsExplanation": "Não sabemos como você encontrou nosso app. Seria útil se você nos contasse!",
"hearUsExplanation": "Não rastreamos instalações. Ajudaria bastante se você contasse onde nos achou!",
"recoveryKeySaved": "Chave de recuperação salva na pasta Downloads!",
"waitingForBrowserRequest": "Aguardando solicitação do navegador...",
"waitingForVerification": "Aguardando verificação...",
@@ -446,8 +448,8 @@
"passKeyPendingVerification": "A verificação ainda está pendente",
"loginSessionExpired": "Sessão expirada",
"loginSessionExpiredDetails": "Sua sessão expirou. Registre-se novamente.",
"developerSettingsWarning": "Deseja mesmo alterar os ajustes de Desenvolvedor?",
"developerSettings": "Ajustes de Desenvolvedor",
"developerSettingsWarning": "Deseja mesmo alterar as Opções de Desenvolvedor?",
"developerSettings": "Opções de Desenvolvedor",
"serverEndpoint": "Endpoint do servidor",
"invalidEndpoint": "Endpoint inválido",
"invalidEndpointMessage": "Desculpe, o ponto de acesso inserido é inválido. Insira um ponto de acesso válido e tente novamente.",
@@ -463,16 +465,16 @@
"tag": "Etiqueta",
"create": "Criar",
"editTag": "Editar etiqueta",
"deleteTagTitle": "Apagar etiqueta?",
"deleteTagTitle": "Excluir etiqueta?",
"deleteTagMessage": "Deseja mesmo excluir esta etiqueta? Essa ação é irreversível.",
"somethingWentWrongParsingCode": "Não foi possível analisar os códigos {x}.",
"updateNotAvailable": "Atualização indisponível",
"viewRawCodes": "Ver códigos brutos",
"rawCodes": "Códigos brutos",
"rawCodeData": "Dados de códigos brutos",
"appLock": "Bloqueio do app",
"appLock": "Bloqueio do aplicativo",
"noSystemLockFound": "Nenhum bloqueio do sistema encontrado",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Para ativar o bloqueio do app, configure uma senha no dispositivo ou tela de bloqueio nas configurações do sistema.",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Para ativar o bloqueio do aplicativo, configure uma senha no dispositivo ou tela de bloqueio nas opções do sistema.",
"autoLock": "Bloqueio automático",
"immediately": "Imediatamente",
"reEnterPassword": "Reinserir senha",
@@ -483,17 +485,17 @@
"setNewPassword": "Defina a nova senha",
"deviceLock": "Bloqueio do dispositivo",
"hideContent": "Ocultar conteúdo",
"hideContentDescriptionAndroid": "Oculta o conteúdo do app no seletor de apps e desativa as capturas de tela",
"hideContentDescriptioniOS": "Oculta o conteúdo do seletor de apps",
"autoLockFeatureDescription": "Tempo de bloqueio do app em segundo plano",
"hideContentDescriptionAndroid": "Oculta o conteúdo do aplicativo no seletor de aplicativos e desativa as capturas de tela",
"hideContentDescriptioniOS": "Oculta o conteúdo do seletor de aplicativos",
"autoLockFeatureDescription": "Tempo de bloqueio do aplicativo em segundo plano",
"appLockDescription": "Escolha entre a tela de bloqueio padrão do seu dispositivo e uma tela de bloqueio personalizada com PIN ou senha.",
"pinLock": "Bloqueio PIN",
"enterPin": "Insira o PIN",
"pinLock": "PIN de bloqueio",
"enterPin": "Inserir PIN",
"setNewPin": "Definir novo PIN",
"importFailureDescNew": "Não foi possível analisar o arquivo selecionado.",
"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",
"authToViewPasskey": "Autentique-se 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.",
"duplicateCodes": "Duplicar códigos",
"noDuplicates": "✨ Sem duplicados",

View File

@@ -77,10 +77,13 @@
"importSelectJsonFile": "Selectează fișierul JSON",
"importSelectAppExport": "Selectează fișierul de export din {appName}",
"importEnteEncGuide": "Selectează fișierul criptat JSON exportat din Bențe",
"importRaivoGuide": "Utilizați opțiunea \"Export OTPs to Zip archive\" în Setările Raivo.\n\nExtrageți fișierul zip și importați fișierul JSON.",
"importBitwardenGuide": "Utilizați opțiunea \"Export vault\" din Bitwarden Tools și importați fișierul JSON necriptat.",
"exportCodes": "Exportă coduri",
"importLabel": "Importă",
"selectFile": "Selectează fișier",
"emailVerificationToggle": "Verificarea adresei de e-mail",
"emailVerificationEnableWarning": "Pentru a evita blocarea contului tău, asigurați-vă că stocați o copie a e-mailului 2FA în afara Ente Auth înainte de a permite verificarea e-mail-ului.",
"authToChangeEmailVerificationSetting": "Te rugăm să te autentifici pentru a schimba verificarea prin e-mail",
"authToChangeYourEmail": "Te rugăm să te autentifici pentru a-ți schimba adresa de e-mail",
"ok": "Ok",

View File

@@ -106,6 +106,9 @@
"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.",
"importAegisGuide": "Använd alternativet \"Exportera valvet\" i Aegis inställningar.\n\nOm ditt valv är krypterat måste du ange valvlösenordet för att dekryptera valvet.",
"import2FasGuide": "Använd alternativet \"Inställningar->Säkerhetskopiera -Exportera\" i 2FAS.\n\nOm din säkerhetskopia är krypterad måste du ange lösenordet för att dekryptera säkerhetskopian.",
"importLastpassGuide": "Använd alternativet \"Överför konton\" i LastPass Authenticators inställningar och tryck på \"Exportera konton till fil\". Importera JSON-filen som laddas ner.",
"exportCodes": "Exportera koder",
"importLabel": "Importera",
"importInstruction": "Vänligen välj en fil som innehåller en lista över dina koder i följande format",
@@ -151,7 +154,7 @@
"enterCodeHint": "Ange den 6-siffriga koden från din autentiseringsapp",
"lostDeviceTitle": "Förlorad enhet?",
"twoFactorAuthTitle": "Tvåfaktorsautentisering",
"passkeyAuthTitle": "Lösenordsverifiering",
"passkeyAuthTitle": "Verifiering med inloggningsnyckel",
"verifyPasskey": "Verifiera nyckel",
"loginWithTOTP": "Logga in med TOTP",
"recoverAccount": "Återställ konto",
@@ -189,6 +192,7 @@
"security": "Säkerhet",
"lockscreen": "Låsskärm",
"authToChangeLockscreenSetting": "Vänligen autentisera för att ändra låsskärms inställningar",
"deviceLockEnablePreSteps": "För att aktivera enhetslås, vänligen ställ in enhetens lösenord eller skärmlås i dina systeminställningar.",
"viewActiveSessions": "Visa aktiva sessioner",
"authToViewYourActiveSessions": "Autentisera för att visa dina aktiva sessioner",
"searchHint": "Sök...",
@@ -201,6 +205,7 @@
"edit": "Redigera",
"share": "Dela",
"shareCodes": "Dela koder",
"shareCodesDuration": "Välj den tidsperiod under vilken du vill dela koder.",
"restore": "Återställ",
"copiedToClipboard": "Kopierat till urklipp",
"copiedNextToClipboard": "Kopierade nästa kod till urklipp",
@@ -268,6 +273,7 @@
"confirmYourRecoveryKey": "Bekräfta din återställningsnyckel",
"confirm": "Bekräfta",
"emailYourLogs": "Maila dina loggar",
"pleaseSendTheLogsTo": "Vänligen skicka loggarna till \n{toEmail}",
"copyEmailAddress": "Kopiera e-postadress",
"exportLogs": "Exportera loggar",
"enterYourRecoveryKey": "Ange din återställningsnyckel",
@@ -279,6 +285,7 @@
"checkStatus": "Kontrollera status",
"downloadUpdate": "Ladda ner",
"criticalUpdateAvailable": "Kritisk uppdatering tillgänglig",
"updateAvailable": "Uppdatering tillgänglig",
"update": "Uppdatera",
"checking": "Kontrollerar ...",
"youAreOnTheLatestVersion": "Du är på den senaste versionen",
@@ -301,7 +308,19 @@
},
"sorry": "Tyvärr",
"pendingSyncs": "Varning",
"checkInboxAndSpamFolder": "Vänligen kontrollera din inkorg (och skräppost) för att slutföra verifieringen",
"tapToEnterCode": "Tryck för att ange kod",
"resendEmail": "Skicka e-post igen",
"manualSort": "Anpassad",
"editOrder": "Redigera ordning",
"mostFrequentlyUsed": "Ofta använd",
"mostRecentlyUsed": "Senast använd",
"activeSessions": "Aktiva sessioner",
"thisWillLogYouOutOfThisDevice": "Detta kommer att logga ut dig från den här enheten!",
"terminateSession": "Avsluta session?",
"terminate": "Avsluta",
"thisDevice": "Den här enheten",
"thisEmailIsAlreadyInUse": "Denna e-postadress används redan",
"incorrectCode": "Felaktig kod",
"authenticationSuccessful": "Autentisering lyckades!",
"twofactorAuthenticationSuccessfullyReset": "Tvåfaktorsautentisering återställd",
@@ -316,7 +335,9 @@
"signInToBackup": "Logga in för att säkerhetskopiera dina koder",
"singIn": "Logga in",
"showLargeIcons": "Visa stora ikoner",
"compactMode": "Kompakt läge",
"shouldHideCode": "Dölj koder",
"focusOnSearchBar": "Fokusera på sök vid appstart",
"minimizeAppOnCopy": "Minimera appen vid kopiering",
"editCodeAuthMessage": "Autentisera för att redigera kod",
"deleteCodeAuthMessage": "Autentisera för att radera kod",
@@ -386,6 +407,7 @@
"pinText": "Fäst",
"unpinText": "Ångra fäst",
"pinnedCodeMessage": "{code} har fästs",
"unpinnedCodeMessage": "{code} har lösgjorts",
"pinned": "Fastmarkerad",
"tags": "Taggar",
"createNewTag": "Skapa ny tagg",
@@ -393,6 +415,7 @@
"create": "Skapa",
"editTag": "Redigera tagg",
"deleteTagTitle": "Radera tagg?",
"somethingWentWrongParsingCode": "Vi kunde inte tolka {x} koder.",
"updateNotAvailable": "Uppdateringen är inte tillgänglig",
"viewRawCodes": "Visa råa koder",
"rawCodes": "Råa koder",
@@ -412,7 +435,20 @@
"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",
"pinLock": "Pinkodslås",
"enterPin": "Ange PIN-kod",
"setNewPin": "Ställ in ny PIN-kod",
"authToViewPasskey": "Autentisera för att visa nyckel"
"importFailureDescNew": "Kunde inte tolka den valda filen.",
"appLockNotEnabled": "Applås ej aktiverat",
"appLockNotEnabledDescription": "Vänligen aktivera applås från Säkerhet > Applås",
"authToViewPasskey": "Autentisera för att visa nyckel",
"appLockOfflineModeWarning": "Du har valt att fortsätta utan säkerhetskopior. Om du glömmer ditt applås, kommer du att bli utelåst från att komma åt dina data.",
"duplicateCodes": "Dubblettkoder",
"noDuplicates": "✨ Inga dubbletter",
"youveNoDuplicateCodesThatCanBeCleared": "Du har inga dubblettkoder som kan rensas bort",
"deduplicateCodes": "Deduplicera koder",
"deselectAll": "Avmarkera alla",
"selectAll": "Markera alla",
"deleteDuplicates": "Radera dubbletter",
"plainHTML": "Ren HTML"
}

View File

@@ -156,6 +156,7 @@
"twoFactorAuthTitle": "İki faktörlü kimlik doğrulama",
"passkeyAuthTitle": "Geçiş anahtarı doğrulaması",
"verifyPasskey": "Geçiş anahtarını doğrula",
"loginWithTOTP": "TOTP ile giriş yap",
"recoverAccount": "Hesap kurtarma",
"enterRecoveryKeyHint": "Kurtarma anahtarınızı girin",
"recover": "Kurtar",
@@ -257,6 +258,10 @@
"areYouSureYouWantToLogout": "Çıkış yapmak istediğinize emin misiniz?",
"yesLogout": "Evet, çıkış yap",
"exit": "Çıkış",
"theme": "Tema",
"lightTheme": "Aydınlık",
"darkTheme": "Karanlık",
"systemTheme": "Sistem",
"verifyingRecoveryKey": "Kurtarma anahtarı doğrulanıyor...",
"recoveryKeyVerified": "Kurtarma anahtarı doğrulandı",
"recoveryKeySuccessBody": "Güzel! Kurtarma anahtarınız geçerli. Doğruladığınız için teşekkürler.\n\nLütfen kurtarma anahtarınızı güvenli bir şekilde yedeklemeyi unutmayın.",
@@ -327,6 +332,9 @@
}
}
},
"manualSort": "Özel",
"mostFrequentlyUsed": "Sık kullanılan",
"mostRecentlyUsed": "Son kullanılan",
"activeSessions": "Aktif oturumlar",
"somethingWentWrongPleaseTryAgain": "Bir şeyler ters gitti, lütfen tekrar deneyin",
"thisWillLogYouOutOfThisDevice": "Bu sizin bu cihazdaki oturumunuzu kapatacaktır!",
@@ -446,6 +454,9 @@
"customEndpoint": "Bağlandı: {endpoint}",
"pinText": "Sabitle",
"unpinText": "Sabitlemeyi kaldır",
"pinnedCodeMessage": "{code} sabitlendi",
"unpinnedCodeMessage": "{code}'un sabitlemesi kaldırıldı",
"pinned": "Sabitlendi",
"tags": "Etiketler",
"createNewTag": "Yeni etiket oluştur",
"tag": "Etiket",
@@ -482,5 +493,13 @@
"appLockNotEnabled": "Uygulama kilidi etkin değil",
"appLockNotEnabledDescription": "Uygulama kilidini Güvenlik -> Uygulama Kilidi üzerinden etkinleştirin",
"authToViewPasskey": "Geçiş anahtarını görmek için lütfen kimliğinizi doğrulayın",
"appLockOfflineModeWarning": "Yedekleme olmadan devam etmeyi seçtiniz. Eğer uygulama parolanızı unutursanız, verilerinize erişiminiz engellenir."
"appLockOfflineModeWarning": "Yedekleme olmadan devam etmeyi seçtiniz. Eğer uygulama parolanızı unutursanız, verilerinize erişiminiz engellenir.",
"duplicateCodes": "Yinelenen kodlar",
"noDuplicates": "✨ Yinelenen yok",
"youveNoDuplicateCodesThatCanBeCleared": "Temizlenebilecek yinelenen kodunuz yok",
"deduplicateCodes": "Kodları tekilleştir",
"deselectAll": "Tümünün seçimini kaldır",
"selectAll": "Tümünü seç",
"deleteDuplicates": "Yinelenenleri sil",
"plainHTML": "Sade HTML"
}

View File

@@ -495,7 +495,7 @@
"appLockNotEnabledDescription": "Увімкніть блокування програм від безпеки > Блокування програм",
"authToViewPasskey": "Будь ласка, авторизуйтеся для перегляду ключа доступу",
"appLockOfflineModeWarning": "Ви обрали продовжити без резервних копій. Якщо ви забудете свій пароль, доступ до ваших даних буде заблоковано.",
"duplicateCodes": "Дублювати коди",
"duplicateCodes": "Дублікати кодів",
"noDuplicates": "✨ Немає дублікатів",
"youveNoDuplicateCodesThatCanBeCleared": "У вас немає дублікатів кодів, які можна очистити",
"deduplicateCodes": "Дедуплікувати коди",

View File

@@ -88,6 +88,8 @@
"useRecoveryKey": "Dùng khóa khôi phục",
"incorrectPasswordTitle": "Mật khẩu không đúng",
"welcomeBack": "Chào mừng trở lại!",
"emailAlreadyRegistered": "Email đã được đăng kí.",
"emailNotRegistered": "Email chưa được đăng kí.",
"madeWithLoveAtPrefix": "được làm bằng ❤️ tại ",
"supportDevs": "Đăng ký <bold-green>ente</bold-green> để hỗ trợ dự án này.",
"supportDiscount": "Sử dụng mã giảm giá \"AUTH\" để được giảm 10% trong năm đầu tiên",
@@ -501,5 +503,6 @@
"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"
"deleteDuplicates": "Xóa trùng lặp",
"plainHTML": "HTML thuần"
}

View File

@@ -88,6 +88,8 @@
"useRecoveryKey": "使用恢复密钥",
"incorrectPasswordTitle": "密码错误",
"welcomeBack": "欢迎回来!",
"emailAlreadyRegistered": "电子邮件地址已被注册。",
"emailNotRegistered": "电子邮件地址未注册。",
"madeWithLoveAtPrefix": "用❤️制作 ",
"supportDevs": "订阅 <bold-green>ente</bold-green> 以支持我们",
"supportDiscount": "使用优惠码“AUTH”可享受首年 10% 折扣",

View File

@@ -8,18 +8,25 @@ const List<Locale> appSupportedLocales = <Locale>[
Locale('ar'),
Locale('bg'),
Locale('ca'),
Locale('cs'),
Locale('de'),
Locale('el'),
Locale('en'),
Locale('es', 'ES'),
Locale('fa'),
Locale('fr'),
Locale('hu'),
Locale('id'),
Locale('it'),
Locale('ja'),
Locale('ko'),
Locale('lt'),
Locale('nl'),
Locale('pl'),
Locale('pt'),
Locale('pt', 'BR'),
Locale('ru'),
Locale('sl'),
Locale('sk'),
Locale('tr'),
Locale('uk'),

View File

@@ -256,9 +256,9 @@ class Code {
try {
final algorithm =
uri.queryParameters['algorithm'].toString().toLowerCase();
if (algorithm == "sha256") {
if (algorithm == "sha256" || "algorithm.sha256" == algorithm) {
return Algorithm.sha256;
} else if (algorithm == "sha512") {
} else if (algorithm == "sha512" || "algorithm.sha512" == algorithm) {
return Algorithm.sha512;
}
} catch (e) {

View File

@@ -90,8 +90,10 @@ class _OnboardingPageState extends State<OnboardingPage> {
child: SingleChildScrollView(
child: Center(
child: ConstrainedBox(
constraints:
const BoxConstraints.tightFor(height: 800, width: 450),
constraints: BoxConstraints(
minHeight: MediaQuery.of(context).size.height,
maxWidth: 450,
),
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 40.0,
@@ -197,6 +199,7 @@ class _OnboardingPageState extends State<OnboardingPage> {
child: Center(
child: Text(
l10n.useOffline,
textAlign: TextAlign.center,
style: body.copyWith(
color: Theme.of(context)
.colorScheme

View File

@@ -318,6 +318,9 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
SizedBox(
width: 400,
child: OutlinedButton(
style: OutlinedButton.styleFrom(
padding: const EdgeInsets.symmetric(vertical: 8),
),
onPressed: () async {
if ((_accountController.text.trim().isEmpty &&
_issuerController.text.trim().isEmpty) ||
@@ -362,7 +365,13 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
CodeDisplay(tags: selectedTags);
display.note = notes;
display.iconID = _customIconID.toLowerCase();
if (widget.code!.issuer != issuer) {
display.iconID = issuer.toLowerCase();
}
if (widget.code!.display.iconID != _customIconID.toLowerCase()) {
display.iconID = _customIconID.toLowerCase();
}
display.iconSrc =
_iconSrc == IconType.simpleIcon ? 'simpleIcon' : 'customIcon';

View File

@@ -28,7 +28,8 @@ class ViewQrPage extends StatelessWidget {
child: Column(
children: [
QrImageView(
data: code!.rawData,
data: code!.rawData
.replaceAll('algorithm=Algorithm.', 'algorithm='),
eyeStyle: QrEyeStyle(
eyeShape: QrEyeShape.square,
color: Theme.of(context).colorScheme.onSurface,

View File

@@ -38,7 +38,7 @@ class PreferenceService {
CodeSortKey codeSortKey() {
return CodeSortKey
.values[_prefs.getInt("codeSortKey") ?? CodeSortKey.manual.index];
.values[_prefs.getInt("codeSortKey") ?? CodeSortKey.issuerName.index];
}
Future<void> setCodeSortKey(CodeSortKey key) async {

View File

@@ -109,7 +109,24 @@ class UserService {
} on DioException catch (e) {
await dialog.hide();
_logger.info(e);
if (e.response != null && e.response!.statusCode == 403) {
final String? enteErrCode = e.response?.data["code"];
if (enteErrCode != null && enteErrCode == "USER_ALREADY_REGISTERED") {
unawaited(
showErrorDialog(
context,
context.l10n.oops,
context.l10n.emailAlreadyRegistered,
),
);
} else if (enteErrCode != null && enteErrCode == "USER_NOT_REGISTERED") {
unawaited(
showErrorDialog(
context,
context.l10n.oops,
context.l10n.emailNotRegistered,
),
);
} else if (e.response != null && e.response!.statusCode == 403) {
unawaited(
showErrorDialog(
context,

View File

@@ -70,6 +70,8 @@ class EnteColorScheme {
final Color gradientButtonBgColor;
final List<Color> gradientButtonBgColors;
bool get isLightTheme => backgroundBase == backgroundBaseLight;
const EnteColorScheme(
this.backgroundBase,
this.backgroundElevated,

View File

@@ -45,6 +45,8 @@ EnteColorScheme getEnteColorScheme(
: Theme.of(context).colorScheme.enteTheme.colorScheme;
}
EnteTextTheme getEnteTextTheme(
BuildContext context, {
bool inverse = false,

View File

@@ -22,9 +22,6 @@ class _CodeTimerProgressState extends State<CodeTimerProgress> {
late final ValueNotifier<double> _progress;
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
@@ -34,9 +31,8 @@ class _CodeTimerProgressState extends State<CodeTimerProgress> {
super.initState();
_periodInMicros = widget.period * 1000000;
_progress = ValueNotifier<double>(0.0);
_startMicros = DateTime.now().microsecondsSinceEpoch;
_updateTimeRemaining(DateTime.now().microsecondsSinceEpoch);
// Use a Timer instead of a Ticker
_timer = Timer.periodic(Duration(milliseconds: _updateIntervalMs), (timer) {
final now = DateTime.now().microsecondsSinceEpoch;
_updateTimeRemaining(now);
@@ -45,11 +41,20 @@ class _CodeTimerProgressState extends State<CodeTimerProgress> {
void _updateTimeRemaining(int currentMicros) {
// More efficient time calculation using modulo
final elapsed = (currentMicros - _startMicros) % _periodInMicros;
final elapsed = (currentMicros) % _periodInMicros;
final timeRemaining = _periodInMicros - elapsed;
_progress.value = timeRemaining / _periodInMicros;
}
@override
void didUpdateWidget(covariant CodeTimerProgress oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.period != widget.period) {
_periodInMicros = widget.period * 1000000;
_updateTimeRemaining(DateTime.now().microsecondsSinceEpoch);
}
}
@override
void dispose() {
_timer.cancel();

View File

@@ -21,8 +21,10 @@ Future<ButtonResult?> showDialogWidget({
required List<ButtonWidget> buttons,
IconData? icon,
bool isDismissible = true,
bool useRootNavigator = false,
}) {
return showDialog(
useRootNavigator: useRootNavigator,
barrierDismissible: isDismissible,
barrierColor: backdropFaintDark,
context: context,

View File

@@ -4,6 +4,7 @@ import 'package:ente_auth/services/preference_service.dart';
import 'package:ente_auth/theme/ente_theme.dart';
import 'package:ente_auth/ui/utils/icon_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class CustomIconPage extends StatefulWidget {
final Map<String, AllIconData> allIcons;
@@ -29,12 +30,15 @@ class _CustomIconPageState extends State<CustomIconPage> {
// Used to request focus on the search box when clicked the search icon
late FocusNode searchBoxFocusNode;
final Set<LogicalKeyboardKey> _pressedKeys = <LogicalKeyboardKey>{};
final ScrollController _scrollController = ScrollController();
@override
void initState() {
_filteredIcons = widget.allIcons;
_showSearchBox = _autoFocusSearch;
searchBoxFocusNode = FocusNode();
ServicesBinding.instance.keyboard.addHandler(_handleKeyEvent);
super.initState();
}
@@ -42,9 +46,41 @@ class _CustomIconPageState extends State<CustomIconPage> {
void dispose() {
_textController.dispose();
searchBoxFocusNode.dispose();
_scrollController.dispose();
ServicesBinding.instance.keyboard.removeHandler(_handleKeyEvent);
super.dispose();
}
bool _handleKeyEvent(KeyEvent event) {
if (event is KeyDownEvent) {
_pressedKeys.add(event.logicalKey);
if ((_pressedKeys.contains(LogicalKeyboardKey.controlLeft) ||
_pressedKeys.contains(LogicalKeyboardKey.control) ||
_pressedKeys.contains(LogicalKeyboardKey.controlRight)) &&
event.logicalKey == LogicalKeyboardKey.keyF) {
setState(() {
_showSearchBox = true;
searchBoxFocusNode.requestFocus();
_textController.clear();
_searchText = "";
});
return true;
}
if (event.logicalKey == LogicalKeyboardKey.escape) {
setState(() {
_textController.clear();
_searchText = "";
_showSearchBox = false;
_applyFilteringAndRefresh();
});
return true;
}
} else if (event is KeyUpEvent) {
_pressedKeys.remove(event.logicalKey);
}
return false;
}
void _applyFilteringAndRefresh() {
if (_searchText.isEmpty) {
setState(() {
@@ -121,8 +157,11 @@ class _CustomIconPageState extends State<CustomIconPage> {
children: [
Expanded(
child: Scrollbar(
controller: _scrollController,
thumbVisibility: true,
interactive: true,
child: GridView.builder(
controller: _scrollController,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: (MediaQuery.sizeOf(context).width ~/ 90)
.clamp(1, double.infinity)

View File

@@ -1,4 +1,5 @@
import 'package:ente_auth/l10n/l10n.dart';
import 'package:ente_auth/services/auth_feature_flag.dart';
import 'package:ente_auth/theme/ente_theme.dart';
import 'package:ente_auth/ui/settings/data/import_page.dart';
import 'package:ente_auth/utils/navigation_util.dart';
@@ -9,11 +10,13 @@ import 'package:logging/logging.dart';
class HomeEmptyStateWidget extends StatelessWidget {
final VoidCallback? onScanTap;
final VoidCallback? onManuallySetupTap;
final VoidCallback? onImportFromGallery;
const HomeEmptyStateWidget({
super.key,
required this.onScanTap,
required this.onManuallySetupTap,
this.onImportFromGallery,
});
@override
@@ -22,7 +25,10 @@ class HomeEmptyStateWidget extends StatelessWidget {
return SingleChildScrollView(
child: Center(
child: ConstrainedBox(
constraints: const BoxConstraints.tightFor(height: 800, width: 450),
constraints: BoxConstraints(
minHeight: MediaQuery.of(context).size.height,
minWidth: 450,
),
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 40.0, horizontal: 40),
child: Column(
@@ -46,7 +52,30 @@ class HomeEmptyStateWidget extends StatelessWidget {
width: 400,
child: OutlinedButton(
onPressed: onScanTap,
child: Text(l10n.importScanQrCode),
style: OutlinedButton.styleFrom(
padding: const EdgeInsets.symmetric(vertical: 8),
),
child: Text(
l10n.importScanQrCode,
textAlign: TextAlign.center,
),
),
),
const SizedBox(height: 18),
if (PlatformUtil.isMobile() &&
FeatureFlagService.instance
.isInternalUserOrDebugBuild())
SizedBox(
width: 400,
child: OutlinedButton(
onPressed: onImportFromGallery,
style: OutlinedButton.styleFrom(
padding: const EdgeInsets.symmetric(vertical: 8),
),
child: const Text(
"Import from gallery",
textAlign: TextAlign.center,
),
),
),
const SizedBox(height: 18),
@@ -54,7 +83,13 @@ class HomeEmptyStateWidget extends StatelessWidget {
width: 400,
child: OutlinedButton(
onPressed: onManuallySetupTap,
child: Text(l10n.importEnterSetupKey),
style: OutlinedButton.styleFrom(
padding: const EdgeInsets.symmetric(vertical: 8),
),
child: Text(
l10n.importEnterSetupKey,
textAlign: TextAlign.center,
),
),
),
const SizedBox(height: 54),

View File

@@ -14,10 +14,12 @@ import 'package:ente_auth/models/code.dart';
import 'package:ente_auth/onboarding/model/tag_enums.dart';
import 'package:ente_auth/onboarding/view/common/tag_chip.dart';
import 'package:ente_auth/onboarding/view/setup_enter_secret_key_page.dart';
import 'package:ente_auth/services/auth_feature_flag.dart';
import 'package:ente_auth/services/preference_service.dart';
import 'package:ente_auth/services/user_service.dart';
import 'package:ente_auth/store/code_display_store.dart';
import 'package:ente_auth/store/code_store.dart';
import 'package:ente_auth/theme/ente_theme.dart';
import 'package:ente_auth/theme/text_style.dart';
import 'package:ente_auth/ui/account/logout_dialog.dart';
import 'package:ente_auth/ui/code_error_widget.dart';
@@ -35,8 +37,10 @@ import 'package:ente_auth/ui/settings_page.dart';
import 'package:ente_auth/ui/sort_option_menu.dart';
import 'package:ente_auth/ui/tools/app_lock.dart';
import 'package:ente_auth/utils/dialog_util.dart';
import 'package:ente_auth/utils/lock_screen_settings.dart';
import 'package:ente_auth/utils/platform_util.dart';
import 'package:ente_auth/utils/totp_util.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -44,6 +48,7 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:logging/logging.dart';
import 'package:move_to_background/move_to_background.dart';
import 'package:scan/scan.dart';
class HomePage extends StatefulWidget {
const HomePage({super.key});
@@ -83,6 +88,7 @@ class _HomePageState extends State<HomePage> {
bool isCompactMode = false;
late CodeSortKey _codeSortKey;
final Set<LogicalKeyboardKey> _pressedKeys = <LogicalKeyboardKey>{};
@override
void initState() {
@@ -109,6 +115,40 @@ class _HomePageState extends State<HomePage> {
_showSearchBox = _autoFocusSearch;
searchBoxFocusNode = FocusNode();
ServicesBinding.instance.keyboard.addHandler(_handleKeyEvent);
}
bool _handleKeyEvent(KeyEvent event) {
if (event is KeyDownEvent) {
_pressedKeys.add(event.logicalKey);
bool isMetaKeyPressed = Platform.isMacOS || Platform.isIOS
? (_pressedKeys.contains(LogicalKeyboardKey.metaLeft) ||
_pressedKeys.contains(LogicalKeyboardKey.meta) ||
_pressedKeys.contains(LogicalKeyboardKey.metaRight))
: (_pressedKeys.contains(LogicalKeyboardKey.controlLeft) ||
_pressedKeys.contains(LogicalKeyboardKey.control) ||
_pressedKeys.contains(LogicalKeyboardKey.controlRight));
if (isMetaKeyPressed && event.logicalKey == LogicalKeyboardKey.keyF) {
setState(() {
_showSearchBox = true;
searchBoxFocusNode.requestFocus();
});
return true;
}
if (event.logicalKey == LogicalKeyboardKey.escape) {
setState(() {
_textController.clear();
_searchText = "";
_showSearchBox = false;
_applyFilteringAndRefresh();
});
return true;
}
} else if (event is KeyUpEvent) {
_pressedKeys.remove(event.logicalKey);
}
return false;
}
void _loadCodes() {
@@ -208,8 +248,9 @@ class _HomePageState extends State<HomePage> {
_streamSubscription?.cancel();
_triggerLogoutEvent?.cancel();
_iconsChangedEvent?.cancel();
_textController.dispose();
_textController.removeListener(_applyFilteringAndRefresh);
ServicesBinding.instance.keyboard.removeHandler(_handleKeyEvent);
searchBoxFocusNode.dispose();
super.dispose();
@@ -321,6 +362,8 @@ class _HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
LockScreenSettings.instance
.setLightMode(getEnteColorScheme(context).isLightTheme);
final l10n = context.l10n;
isCompactMode = PreferenceService.instance.isCompactMode();
@@ -374,55 +417,52 @@ class _HomePageState extends State<HomePage> {
),
centerTitle: PlatformUtil.isDesktop() ? false : true,
actions: <Widget>[
SortCodeMenuWidget(
currentKey: PreferenceService.instance.codeSortKey(),
onSelected: (newOrder) async {
await PreferenceService.instance.setCodeSortKey(newOrder);
if (newOrder == CodeSortKey.manual &&
newOrder == _codeSortKey) {
await navigateToReorderPage(_allCodes!);
}
setState(() {
_codeSortKey = newOrder;
});
if (mounted) {
_applyFilteringAndRefresh();
}
},
),
PlatformUtil.isDesktop()
? IconButton(
icon: const Icon(Icons.lock),
tooltip: l10n.appLock,
onPressed: () async {
await navigateToLockScreen();
},
)
: const SizedBox.shrink(),
const SizedBox(
width: 4,
Padding(
padding: const EdgeInsets.all(8.0),
child: SortCodeMenuWidget(
currentKey: PreferenceService.instance.codeSortKey(),
onSelected: (newOrder) async {
await PreferenceService.instance.setCodeSortKey(newOrder);
if (newOrder == CodeSortKey.manual &&
newOrder == _codeSortKey) {
await navigateToReorderPage(_allCodes!);
}
setState(() {
_codeSortKey = newOrder;
});
if (mounted) {
_applyFilteringAndRefresh();
}
},
),
),
if (PlatformUtil.isDesktop())
IconButton(
icon: const Icon(Icons.lock),
tooltip: l10n.appLock,
padding: const EdgeInsets.all(8.0),
onPressed: () async {
await navigateToLockScreen();
},
),
IconButton(
icon: _showSearchBox
? const Icon(Icons.clear)
: const Icon(Icons.search),
tooltip: l10n.search,
padding: const EdgeInsets.all(8.0),
onPressed: () {
setState(
() {
_showSearchBox = !_showSearchBox;
if (!_showSearchBox) {
_textController.clear();
_searchText = "";
} else {
_searchText = _textController.text;
// Request focus on the search box
searchBoxFocusNode.requestFocus();
}
_applyFilteringAndRefresh();
},
);
setState(() {
_showSearchBox = !_showSearchBox;
if (!_showSearchBox) {
_textController.clear();
_searchText = "";
} else {
_searchText = _textController.text;
searchBoxFocusNode.requestFocus();
}
_applyFilteringAndRefresh();
});
},
),
],
@@ -443,6 +483,7 @@ class _HomePageState extends State<HomePage> {
return HomeEmptyStateWidget(
onScanTap: _redirectToScannerPage,
onManuallySetupTap: _redirectToManualEntryPage,
onImportFromGallery: _importFromGallery,
);
} else {
final anyCodeHasError =
@@ -658,6 +699,29 @@ class _HomePageState extends State<HomePage> {
_applyFilteringAndRefresh();
}
Future<void> _importFromGallery() async {
try {
final FilePickerResult? result = await FilePicker.platform.pickFiles(
type: FileType.image,
allowMultiple: false,
);
if (result != null) {
final path = result.files.single.path!;
String? res = await Scan.parse(path);
final Code? code = res != null ? Code.fromOTPAuthUrl(res) : null;
if (code != null) {
await CodeStore.instance.addCode(code);
if ((_allCodes?.where((e) => !e.hasError).length ?? 0) > 2) {
_focusNewCode(code);
}
}
}
} catch (e, s) {
await showGenericErrorDialog(context: context, error: e);
_logger.severe("Error while importing from gallery", e, s);
}
}
Widget _getFab() {
if (PlatformUtil.isDesktop()) {
return FloatingActionButton(
@@ -688,6 +752,15 @@ class _HomePageState extends State<HomePage> {
labelWidget: SpeedDialLabelWidget(context.l10n.scanAQrCode),
onTap: _redirectToScannerPage,
),
if (PlatformUtil.isMobile() &&
FeatureFlagService.instance.isInternalUserOrDebugBuild())
SpeedDialChild(
child: const Icon(Icons.image),
foregroundColor: Theme.of(context).colorScheme.fabForegroundColor,
backgroundColor: Theme.of(context).colorScheme.fabBackgroundColor,
labelWidget: const SpeedDialLabelWidget("Import from gallery"),
onTap: _importFromGallery,
),
SpeedDialChild(
child: const Icon(Icons.keyboard),
foregroundColor: Theme.of(context).colorScheme.fabForegroundColor,

View File

@@ -20,6 +20,14 @@ class _ReorderCodesPageState extends State<ReorderCodesPage> {
bool hasChanged = false;
final logger = Logger('ReorderCodesPage');
final ScrollController _scrollController = ScrollController();
@override
void dispose() {
_scrollController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final bool isCompactMode = PreferenceService.instance.isCompactMode();
@@ -55,33 +63,40 @@ class _ReorderCodesPageState extends State<ReorderCodesPage> {
),
],
),
body: ReorderableListView(
buildDefaultDragHandles: false,
proxyDecorator: (Widget child, int index, Animation<double> animation) {
return AnimatedBuilder(
animation: animation,
builder: (BuildContext context, _) {
final animValue = Curves.easeInOut.transform(animation.value);
final scale = lerpDouble(1, 1.05, animValue)!;
return Transform.scale(scale: scale, child: child);
},
);
},
children: [
for (final code in widget.codes)
ReorderableDragStartListener(
key: ValueKey('${code.hashCode}_${code.generatedID}'),
index: widget.codes.indexOf(code),
child: CodeWidget(
key: ValueKey(code.generatedID),
code,
isCompactMode: isCompactMode,
body: Scrollbar(
controller: _scrollController,
thumbVisibility: true,
interactive: true,
child: ReorderableListView(
scrollController: _scrollController,
buildDefaultDragHandles: false,
proxyDecorator:
(Widget child, int index, Animation<double> animation) {
return AnimatedBuilder(
animation: animation,
builder: (BuildContext context, _) {
final animValue = Curves.easeInOut.transform(animation.value);
final scale = lerpDouble(1, 1.05, animValue)!;
return Transform.scale(scale: scale, child: child);
},
);
},
children: [
for (final code in widget.codes)
ReorderableDragStartListener(
key: ValueKey('${code.hashCode}_${code.generatedID}'),
index: widget.codes.indexOf(code),
child: CodeWidget(
key: ValueKey(code.generatedID),
code,
isCompactMode: isCompactMode,
),
),
),
],
onReorder: (oldIndex, newIndex) {
updateCodeIndex(oldIndex, newIndex);
},
],
onReorder: (oldIndex, newIndex) {
updateCodeIndex(oldIndex, newIndex);
},
),
),
);
}

View File

@@ -189,7 +189,8 @@ Future<String> _getAuthDataForExport() async {
String data = "";
for (final code in allCodes) {
if (code.hasError) continue;
data += "${code.rawData.replaceAll(',', '%2C')}\n";
data +=
"${code.rawData.replaceAll('algorithm=Algorithm.', 'algorithm=').replaceAll(',', '%2C')}\n";
}
return data;

View File

@@ -8,9 +8,17 @@ import 'package:intl/intl.dart';
import 'package:qr_flutter/qr_flutter.dart';
Future<String> generateQRImageBase64(String data) async {
final qrPainter = QrPainter(
const size = 250.0;
const padding = 20.0;
final qrCode = QrCode.fromData(
data: data,
version: QrVersions.auto,
errorCorrectLevel: QrErrorCorrectLevel.L,
);
final qrPainter = QrPainter.withQr(
qr: qrCode,
gapless: true,
eyeStyle: const QrEyeStyle(
eyeShape: QrEyeShape.square,
color: Colors.black,
@@ -21,12 +29,18 @@ Future<String> generateQRImageBase64(String data) async {
),
);
const size = 250.0;
const totalSize = size + padding * 2;
final recorder = ui.PictureRecorder();
final canvas = Canvas(recorder);
qrPainter.paint(canvas, const Size(size, size));
const paintBounds = Size(size, size);
canvas.translate(padding, padding);
qrPainter.paint(canvas, paintBounds);
final picture = recorder.endRecording();
final img = await picture.toImage(size.toInt(), size.toInt());
final img = await picture.toImage(totalSize.toInt(), totalSize.toInt());
final byteData = await img.toByteData(format: ui.ImageByteFormat.png);
final pngBytes = byteData!.buffer.asUint8List();

View File

@@ -118,10 +118,10 @@ List<Code> parseGoogleAuth(String qrCodeData) {
if (otpParameter.type == MigrationPayload_OtpType.OTP_TYPE_TOTP ||
otpParameter.type == MigrationPayload_OtpType.OTP_TYPE_UNSPECIFIED) {
otpUrl =
'otpauth://totp/$issuer:$account?secret=$secret&issuer=$issuer&algorithm=$algorithm&digits=$digits&period=$timer';
'otpauth://totp/$issuer:$account?secret=$secret&issuer=$issuer&algorithm=${algorithm.name}&digits=$digits&period=$timer';
} else if (otpParameter.type == MigrationPayload_OtpType.OTP_TYPE_HOTP) {
otpUrl =
'otpauth://hotp/$issuer:$account?secret=$secret&issuer=$issuer&algorithm=$algorithm&digits=$digits&counter=$counter';
'otpauth://hotp/$issuer:$account?secret=$secret&issuer=$issuer&algorithm=${algorithm.name}&digits=$digits&counter=$counter';
} else {
throw Exception('Invalid OTP type');
}

View File

@@ -5,6 +5,7 @@ import 'dart:typed_data';
import 'package:ente_auth/l10n/l10n.dart';
import 'package:ente_auth/models/code.dart';
import 'package:ente_auth/models/code_display.dart';
import 'package:ente_auth/services/authenticator_service.dart';
import 'package:ente_auth/store/code_store.dart';
import 'package:ente_auth/ui/common/progress_dialog.dart';
@@ -58,7 +59,7 @@ Future<void> _pick2FasFile(BuildContext context) async {
}
final ProgressDialog progressDialog =
createProgressDialog(context, l10n.pleaseWait);
await progressDialog.show();
try {
String path = result.files.single.path!;
int? count = await _process2FasExportFile(context, path, progressDialog);
@@ -100,6 +101,13 @@ Future<int?> _process2FasExportFile(
);
return null;
}
final groupIdToName = {};
var groups = decodedJson['groups'];
if (groups != null) {
for (var group in groups) {
groupIdToName[group['id']] = group['name'];
}
}
var decodedServices = decodedJson['services'];
// https://github.com/twofas/2fas-android/blob/e97f1a1040eafaed6d5284d54d33403dff215886/data/services/src/main/java/com/twofasapp/data/services/domain/BackupContent.kt#L39
@@ -120,6 +128,7 @@ Future<int?> _process2FasExportFile(
await dialog.hide();
return null;
}
await dialog.show();
final content = decrypt2FasVault(decodedJson, password: password!);
decodedServices = jsonDecode(content);
} catch (e, s) {
@@ -134,6 +143,8 @@ Future<int?> _process2FasExportFile(
}
return null;
}
} else {
await dialog.show();
}
final parsedCodes = [];
for (var item in decodedServices) {
@@ -143,6 +154,7 @@ Future<int?> _process2FasExportFile(
if (issuer == null || (issuer as String).isEmpty) {
issuer = item['name'] ?? '';
}
final String? groupID = item['groupId'];
var algorithm = item['otp']['algorithm'];
var secret = item['secret'];
var timer = item['otp']['period'];
@@ -161,7 +173,13 @@ Future<int?> _process2FasExportFile(
} else {
throw Exception('Invalid OTP type ${kind.toLowerCase()}');
}
parsedCodes.add(Code.fromOTPAuthUrl(otpUrl));
Code code = Code.fromOTPAuthUrl(otpUrl);
if (groupID != null && groupIdToName.containsKey(groupID)) {
code = code.copyWith(
display: CodeDisplay(tags: [groupIdToName[groupID]]),
);
}
parsedCodes.add(code);
}
for (final code in parsedCodes) {

View File

@@ -128,6 +128,8 @@ class _ItemsWidgetState extends State<ItemsWidget> {
return 'العربية';
case 'ca':
return 'Català';
case 'cs':
return 'Čeština';
case 'en':
return 'English';
case 'bg':
@@ -145,8 +147,14 @@ class _ItemsWidgetState extends State<ItemsWidget> {
return 'Français';
case 'de':
return 'Deutsch';
case 'hu':
return 'Magyar';
case 'id':
return 'Bahasa Indonesia';
case 'it':
return 'Italiano';
case 'lt':
return 'Lietuvių';
case 'nl':
return 'Nederlands';
case 'pl':
@@ -160,6 +168,8 @@ class _ItemsWidgetState extends State<ItemsWidget> {
}
case 'ru':
return 'Русский';
case 'sl':
return 'Slovenščina';
case 'sk':
return 'Slovenčina';
case 'tr':

View File

@@ -329,7 +329,7 @@ class _LockScreenState extends State<LockScreen> with WidgetsBindingObserver {
_isShowingLockScreen = false;
if (result) {
lastAuthenticatingTime = DateTime.now().millisecondsSinceEpoch;
AppLock.of(context)!.didUnlock();
AppLock.of(context)?.didUnlock();
await _lockscreenSetting.setInvalidAttemptCount(0);
setState(() {
lockedTimeInSeconds = 15;

View File

@@ -413,9 +413,11 @@ Future<dynamic> showTextInputDialog(
TextCapitalization textCapitalization = TextCapitalization.none,
bool alwaysShowSuccessState = false,
bool isPasswordInput = false,
bool useRootNavigator = false,
}) {
return showDialog(
barrierColor: backdropFaintDark,
useRootNavigator: useRootNavigator,
context: context,
builder: (context) {
final bottomInset = MediaQuery.of(context).viewInsets.bottom;

View File

@@ -24,16 +24,7 @@ class DirectoryUtils {
}
static Future<Directory> getDirectoryForInit() async {
Directory? directory;
if (Platform.isLinux) {
try {
return cacheHome;
} catch (e) {
logger.warning("Failed to get cacheHome: $e");
}
}
directory ??= await getApplicationDocumentsDirectory();
Directory directory = await getApplicationCacheDirectory();
return Directory(p.join(directory.path, "enteauthinit"));
}

View File

@@ -4,6 +4,7 @@ import "dart:typed_data";
import "package:ente_auth/core/configuration.dart";
import "package:ente_auth/utils/platform_util.dart";
import "package:ente_crypto_dart/ente_crypto_dart.dart";
import "package:flutter/material.dart";
import "package:flutter_secure_storage/flutter_secure_storage.dart";
import "package:privacy_screen/privacy_screen.dart";
import "package:shared_preferences/shared_preferences.dart";
@@ -24,6 +25,7 @@ class LockScreenSettings {
static const keyHasMigratedLockScreenChanges =
"ls_has_migrated_lock_screen_changes";
static const keyShowOfflineModeWarning = "ls_show_offline_mode_warning";
static const String kIsLightMode = "is_light_mode";
final List<Duration> autoLockDurations = const [
Duration(milliseconds: 650),
@@ -74,18 +76,30 @@ class LockScreenSettings {
await _preferences.setBool(keyHasMigratedLockScreenChanges, true);
}
Future<void> setLightMode(bool isLightMode) async {
if (isLightMode != (_preferences.getBool(kIsLightMode) ?? true)) {
await _preferences.setBool(kIsLightMode, isLightMode);
}
}
Future<void> setHideAppContent(bool hideContent) async {
if (PlatformUtil.isDesktop()) return;
final bool isLightMode = _preferences.getBool(kIsLightMode) ?? true;
!hideContent
? PrivacyScreen.instance.disable()
: await PrivacyScreen.instance.enable(
iosOptions: const PrivacyIosOptions(
enablePrivacy: true,
privacyImageName: 'LaunchImage',
),
androidOptions: const PrivacyAndroidOptions(
enableSecure: true,
),
blurEffect: PrivacyBlurEffect.extraLight,
backgroundColor:
isLightMode ? const Color(0xffffffff) : const Color(0xff000000),
blurEffect: isLightMode
? PrivacyBlurEffect.extraLight
: PrivacyBlurEffect.extraLight,
);
await _preferences.setBool(keyHideAppContent, hideContent);
}

View File

@@ -18,6 +18,7 @@
</screenshot>
</screenshots>
<releases>
<release version="4.2.4" date="2025-01-11" />
<release version="4.0.3" date="2024-10-08" />
</releases>
<provides>

View File

@@ -11,6 +11,6 @@ PRODUCT_NAME = Ente Auth
PRODUCT_BUNDLE_IDENTIFIER = io.ente.auth
// The copyright displayed in application information
PRODUCT_COPYRIGHT = Copyright © 2022 io.ente.auth. All rights reserved.
PRODUCT_COPYRIGHT = Copyright © 2025 io.ente.auth. All rights reserved.
DEVELOPMENT_TEAM = 6Z68YJY9Q2

View File

@@ -451,10 +451,10 @@ packages:
dependency: "direct main"
description:
name: file_picker
sha256: "167bb619cdddaa10ef2907609feb8a79c16dfa479d3afaf960f8e223f754bf12"
sha256: c904b4ab56d53385563c7c39d8e9fa9af086f91495dfc48717ad84a42c3cf204
url: "https://pub.dev"
source: hosted
version: "8.1.2"
version: "8.1.7"
file_saver:
dependency: "direct main"
description:
@@ -1301,6 +1301,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.1.0"
scan:
dependency: "direct main"
description:
name: scan
sha256: b343ec36f863a88d41eb4c174b810c055c6bd1f1822b2188ab31aab684fb7cdb
url: "https://pub.dev"
source: hosted
version: "1.6.0"
screen_retriever:
dependency: transitive
description:

View File

@@ -1,6 +1,7 @@
name: ente_auth
description: ente two-factor authenticator
version: 4.2.2+422
version: 4.2.7+427
publish_to: none
environment:
@@ -32,7 +33,7 @@ dependencies:
expansion_tile_card: ^3.0.0
ffi: ^2.1.0
figma_squircle: ^0.5.3
file_picker: ^8.1.2
file_picker: ^8.1.7
# https://github.com/incrediblezayed/file_saver/issues/86
file_saver: ^0.2.11
fixnum: ^1.1.0
@@ -82,6 +83,7 @@ dependencies:
protobuf: ^3.0.0
qr_code_scanner: ^1.0.1
qr_flutter: ^4.1.0
scan: ^1.6.0
sentry: ^8.7.0
sentry_flutter: ^8.7.0
share_plus: ^10.0.2

View File

@@ -1,4 +1,4 @@
FROM golang:1.20-alpine3.17 AS builder
FROM golang:1.23-alpine3.21 AS builder
RUN apk add --no-cache gcc musl-dev git build-base pkgconfig libsodium-dev
ENV GOOS=linux
@@ -14,7 +14,7 @@ COPY . .
RUN --mount=type=cache,target=/root/.cache/go-build \
go build -o ente-cli main.go
FROM alpine:3.17
FROM alpine:3.21
RUN apk add libsodium-dev
COPY --from=builder /etc/ente/ente-cli .

View File

@@ -1,4 +1,4 @@
FROM golang:1.20-alpine3.17@sha256:9c2f89db6fda13c3c480749787f62fed5831699bb2c32881b8f327f1cf7bae42 AS builder386
FROM golang:1.23-alpine3.21@sha256:6c5c9590f169f77c8046e45c611d3b28fe477789acd8d3762d23d4744de69812 AS builder386
RUN apt-get update
RUN apt-get install -y gcc
RUN apt-get install -y git

View File

@@ -1,6 +1,6 @@
module github.com/ente-io/cli
go 1.20
go 1.23
require (
github.com/go-resty/resty/v2 v2.7.0
@@ -33,7 +33,7 @@ require (
github.com/spf13/cast v1.5.1 // indirect
github.com/spf13/cobra v1.7.0
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/pflag v1.0.5
github.com/spf13/viper v1.16.0
github.com/subosito/gotenv v1.6.0 // indirect
go.etcd.io/bbolt v1.3.7

View File

@@ -64,6 +64,7 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
@@ -110,6 +111,7 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
@@ -146,9 +148,11 @@ github.com/kong/go-srp v0.0.0-20191210190804-cde1efa3c083/go.mod h1:Zde5RRLiH8/2
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
@@ -169,6 +173,7 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=

View File

@@ -1,57 +1,61 @@
# CHANGELOG
## v1.7.8 (Unreleased)
## v1.7.9 (Unreleased)
- .
- .
## v1.7.8
- Parse description from image metadata.
## v1.7.7
- Retain JPEG originals even on date modifications.
- Support Portuguese and Vietnamese translations.
- Retain JPEG originals even on date modifications.
- Support Portuguese and Vietnamese translations.
## v1.7.6
- Face merging and suggestions (beta).
- Parse description from metadata JSON.
- Support Italian, Ukrainian and Lithuanian translations.
- Fix an out of memory crash on uploading large libraries.
- Face merging and suggestions (beta).
- Parse description from metadata JSON.
- Support Italian, Ukrainian and Lithuanian translations.
- Fix an out of memory crash on uploading large libraries.
## v1.7.5
- Face grouping (beta).
- Include shared files in export.
- Directly upload to selected album on drag and drop.
- Improve heuristics for clubbing a photo and video into a live photo.
- Face grouping (beta).
- Include shared files in export.
- Directly upload to selected album on drag and drop.
- Improve heuristics for clubbing a photo and video into a live photo.
## v1.7.4
- Improved date search, including support for day of week and hour of day.
- Fix video thumbnail generation and upload on Intel macOS.
- Club a photo and video into a live photo only if both are within 2 minutes.
- Fix an issue causing ZIP uploads to sometimes fail.
- Improved date search, including support for day of week and hour of day.
- Fix video thumbnail generation and upload on Intel macOS.
- Club a photo and video into a live photo only if both are within 2 minutes.
- Fix an issue causing ZIP uploads to sometimes fail.
## v1.7.3
- Face recognition and magic search (public beta).
- Support Polish translations.
- Face recognition and magic search (public beta).
- Support Polish translations.
## v1.7.2
- Significantly improve the speed of the metadata parsing step during imports
of Google takeouts.
- Add a option to set and use a custom endpoint.
- Fix an issue preventing subscription purchases and renewals.
- Clear cached password after changing it on a different device.
- Reconcile exported files with disk on app start and resync.
- Significantly improve the speed of the metadata parsing step during imports of
Google takeouts.
- Add a option to set and use a custom endpoint.
- Fix an issue preventing subscription purchases and renewals.
- Clear cached password after changing it on a different device.
- Reconcile exported files with disk on app start and resync.
## v1.7.1
- Support for passkeys as a second factor authentication mechanism.
- Remember the window size across app restarts.
- Revert changes to the Linux icon.
- Fix an issue causing deleted items in watched folders to not move to
uncategorized.
- Fix duplicate file uploads when initializing a folder watch (sometimes).
- Support for passkeys as a second factor authentication mechanism.
- Remember the window size across app restarts.
- Revert changes to the Linux icon.
- Fix an issue causing deleted items in watched folders to not move to
uncategorized.
- Fix duplicate file uploads when initializing a folder watch (sometimes).
## v1.7.0
@@ -61,138 +65,138 @@ communicate only using a predefined IPC boundary.
Other highlights:
- View your photos on big screens and Chromecast devices by using the "Play
album on TV" option in the album menu.
- Support Brazilian Portuguese, German and Russian.
- Provide a checkbox to select all photos in a day.
- Fix a case where the dedup screen would not refresh after removing items.
- View your photos on big screens and Chromecast devices by using the "Play
album on TV" option in the album menu.
- Support Brazilian Portuguese, German and Russian.
- Provide a checkbox to select all photos in a day.
- Fix a case where the dedup screen would not refresh after removing items.
## v1.6.63
### New
- Option to select file download location.
- Add support for searching popular cities
- Sorted duplicates in desecending order of size
- Add Counter to upload section
- Display full name and collection name on hover on dedupe screen photos
- Option to select file download location.
- Add support for searching popular cities
- Sorted duplicates in desecending order of size
- Add Counter to upload section
- Display full name and collection name on hover on dedupe screen photos
### Bug Fixes
- Fix add to album padding issue
- Fix double uncategorized album issue
- Hide Hidden collection files from all section
- Fix add to album padding issue
- Fix double uncategorized album issue
- Hide Hidden collection files from all section
## v1.6.62
### New
- Integrated onnx clip runner
- Integrated onnx clip runner
### Bug Fixes
- Fixes login button requiring double click issue
- Fixes Collection sort state not preserved issue
- Fixes continuous export causing app crash
- Improves ML related copies for better distinction from clip
- Added Better favicon for light mode
- Fixed face indexing issues
- Fixed thumbnail load issue
- Fixes login button requiring double click issue
- Fixes Collection sort state not preserved issue
- Fixes continuous export causing app crash
- Improves ML related copies for better distinction from clip
- Added Better favicon for light mode
- Fixed face indexing issues
- Fixed thumbnail load issue
## v1.6.60
### Bug Fixes
- Fix Thumbnail Orientation issue
- Fix ML logging issue
- Fix Thumbnail Orientation issue
- Fix ML logging issue
## v1.6.59
### New
- Added arm64 builds for linux
- Added arm64 builds for linux
### Bug Fixes
- Fix Editor file not loading issue
- Fix ML results missing thumbnail issue
- Fix Editor file not loading issue
- Fix ML results missing thumbnail issue
## v1.6.58
### Bug Fixes
- Fix File load issue
- Fix File load issue
## v1.6.57
### New Features
- Added encrypted Disk caching for files
- Added option to customize cache folder location
- Added encrypted Disk caching for files
- Added option to customize cache folder location
### Bug Fixes
- Fixed caching issue,causing multiple download of file during ml sync
- Fixed caching issue,causing multiple download of file during ml sync
## v1.6.55
### Bug Fixes
- Added manage family portal option if add-on is active
- Fixed filename date parsing issue
- Fixed storage limit ui glitch
- Fixed dedupe page layout issue
- Fixed ElectronAPI refactoring issue
- Fixed Search related issues
- Added manage family portal option if add-on is active
- Fixed filename date parsing issue
- Fixed storage limit ui glitch
- Fixed dedupe page layout issue
- Fixed ElectronAPI refactoring issue
- Fixed Search related issues
## v1.6.54
### New Features
- Added support for HEIC and raw image in photo editor
- Added support for HEIC and raw image in photo editor
### Bug Fixes
- Fixed 16bit HDR HEIC images support
- Fixed blocked login due safe storage issue
- Fixed Search related issues
- Fixed issue of watch folder not cleared on logout
- other under the hood ui/ux improvements
- Fixed 16bit HDR HEIC images support
- Fixed blocked login due safe storage issue
- Fixed Search related issues
- Fixed issue of watch folder not cleared on logout
- other under the hood ui/ux improvements
## v1.6.53
### Bug Fixes
- Fixed watch folder disabled issue
- Fixed BF Add on related issues
- Fixed clip sync issue and added better logging
- Fixed mov file upload
- Fixed clip extraction related issue
- Fixed watch folder disabled issue
- Fixed BF Add on related issues
- Fixed clip sync issue and added better logging
- Fixed mov file upload
- Fixed clip extraction related issue
## v1.6.52
### New Features
- Added Clip Desktop on windows
- Added Clip Desktop on windows
### Bug Fixes
- fixed google json matching issue
- other under-the-hood changes to improve performance and bug fixes
- fixed google json matching issue
- other under-the-hood changes to improve performance and bug fixes
## v1.6.50
### New Features
- Added Clip desktop
- Added Clip desktop
### Bug Fixes
- Fixed desktop downloaded file had extra dot in the name
- Cleanup error messages
- fix the motion photo clustering issue
- Add option to disable cf proxy locally
- other under-the-hood changes to improve UX
- Fixed desktop downloaded file had extra dot in the name
- Cleanup error messages
- fix the motion photo clustering issue
- Add option to disable cf proxy locally
- other under-the-hood changes to improve UX
## v1.6.49
@@ -205,63 +209,63 @@ to know about feature and functionalities.
### Bug Fixes
- Fixed misaligned icons in photo-viewer
- Fixed issue with Motion photo upload
- Fixed issue with Live-photo upload
- other minor ux improvement
- Fixed misaligned icons in photo-viewer
- Fixed issue with Motion photo upload
- Fixed issue with Live-photo upload
- other minor ux improvement
## v1.6.46
### Bug Fixes
- Fixes OOM crashes during file upload
[#1379](https://github.com/ente-io/photos-web/pull/1379)
- Fixes OOM crashes during file upload
[#1379](https://github.com/ente-io/photos-web/pull/1379)
## v1.6.45
### Bug Fixes
- Fixed app keeps reloading issue
[#235](https://github.com/ente-io/photos-desktop/pull/235)
- Fixed dng and arw preview issue
[#1378](https://github.com/ente-io/photos-web/pull/1378)
- Added view crash report option (help menu) for user to share electron crash
report locally
- Fixed app keeps reloading issue
[#235](https://github.com/ente-io/photos-desktop/pull/235)
- Fixed dng and arw preview issue
[#1378](https://github.com/ente-io/photos-web/pull/1378)
- Added view crash report option (help menu) for user to share electron crash
report locally
## v1.6.44
- Upgraded electron to get latest security patches and other improvements.
- Upgraded electron to get latest security patches and other improvements.
## v1.6.43
### Added
- #### Check for update and changelog option
- #### Check for update and changelog option
Added options to check for update manually and a view changelog via the app
menubar
- #### Opt out of crash reporting
- #### Opt out of crash reporting
Added option to out of a crash reporting, it can accessed from the settings
-> preferences -> disable crash reporting
- #### Type search
- #### Type search
Added new search option to search files based on file type i.e, image,
video, live-photo.
- #### Manual Convert Button
- #### Manual Convert Button
In case the video is not playable, Now there is a convert button which can
be used to trigger conversion of the video to supported format.
- #### File Download Progress
- #### File Download Progress
The file loader now also shows the exact percentage download progress,
instead of just a simple loader.
- #### Bug fixes & other enhancements
- #### Bug fixes & other enhancements
We have squashed a few pesky bugs that were reported by our community
@@ -269,23 +273,23 @@ to know about feature and functionalities.
### Added
- #### Hidden albums
- #### Hidden albums
You can now hide albums, just like individual memories.
- #### Email verification
- #### Email verification
We have now made email verification optional, so you can sign in with just
your email address and password, without waiting for a verification code.
You can opt in / out of email verification from Settings > Security.
- #### Download Album
- #### Download Album
You can now chose the download location for downloading albums. Along with
that we have also added progress bar for album download.
- #### Bug fixes & other enhancements
- #### Bug fixes & other enhancements
We have squashed a few pesky bugs that were reported by our community

View File

@@ -1,8 +1,8 @@
# Dependencies
- [Electron](#electron)
- [Dev dependencies](#dev)
- [Functionality](#functionality)
- [Electron](#electron)
- [Dev dependencies](#dev)
- [Functionality](#functionality)
## Electron
@@ -13,24 +13,24 @@ Electron embeds Chromium and Node.js in the generated app's binary. The
generated app thus consists of two separate processes - the _main_ process, and
a _renderer_ process.
- The _main_ process runs the embedded node. This process can deal with the
host OS - it is conceptually like a `node` repl running on your machine. In
our case, the TypeScript code (in the `src/` directory) gets transpiled by
`tsc` into JavaScript in the `build/app/` directory, which gets bundled in
the generated app's binary and is loaded by the node (main) process when the
app starts.
- The _main_ process runs the embedded node. This process can deal with the host
OS - it is conceptually like a `node` repl running on your machine. In our
case, the TypeScript code (in the `src/` directory) gets transpiled by `tsc`
into JavaScript in the `build/app/` directory, which gets bundled in the
generated app's binary and is loaded by the node (main) process when the app
starts.
- The _renderer_ process is a regular web app that gets loaded into the
embedded Chromium. When the main process starts, it creates a new "window"
that shows this embedded Chromium. In our case, we build and bundle a static
export of the [Photos web app](../../web/README.md) in the generated desktop
app. This gets loaded by the embedded Chromium at runtime, acting as the
desktop app's UI.
- The _renderer_ process is a regular web app that gets loaded into the embedded
Chromium. When the main process starts, it creates a new "window" that shows
this embedded Chromium. In our case, we build and bundle a static export of
the [Photos web app](../../web/README.md) in the generated desktop app. This
gets loaded by the embedded Chromium at runtime, acting as the desktop app's
UI.
There is also a third environment that gets temporarily created:
- The [preload script](../src/preload.ts) acts as a gateway between the _main_
and the _renderer_ process. It runs in its own isolated environment.
- The [preload script](../src/preload.ts) acts as a gateway between the _main_
and the _renderer_ process. It runs in its own isolated environment.
### Packaging
@@ -66,15 +66,15 @@ Electron process. This allows us to directly use the output produced by
### Others
- [any-shell-escape](https://github.com/boazy/any-shell-escape) is for
escaping shell commands before we execute them (e.g. say when invoking the
embedded ffmpeg CLI).
- [any-shell-escape](https://github.com/boazy/any-shell-escape) is for escaping
shell commands before we execute them (e.g. say when invoking the embedded
ffmpeg CLI).
- [auto-launch](https://github.com/Teamwork/node-auto-launch) is for
automatically starting our app on login, if the user so wishes.
- [auto-launch](https://github.com/Teamwork/node-auto-launch) is for
automatically starting our app on login, if the user so wishes.
- [electron-store](https://github.com/sindresorhus/electron-store) is used for
persisting user preferences and other arbitrary data.
- [electron-store](https://github.com/sindresorhus/electron-store) is used for
persisting user preferences and other arbitrary data.
## Dev
@@ -84,20 +84,20 @@ are similar to that in the web code.
Some extra ones specific to the code here are:
- [@tsconfig/recommended](https://github.com/tsconfig/bases) gives us a base
tsconfig for the Node.js version that our current Electron version uses.
- [@tsconfig/recommended](https://github.com/tsconfig/bases) gives us a base
tsconfig for the Node.js version that our current Electron version uses.
- [shx](https://github.com/shelljs/shx) provides us a portable way to use Unix
commands in our `package.json` scripts. This allows us to use the same
commands (like `ln`) across both POSIX platforms (Linux, macOS) and Windows.
- [shx](https://github.com/shelljs/shx) provides us a portable way to use Unix
commands in our `package.json` scripts. This allows us to use the same
commands (like `ln`) across both POSIX platforms (Linux, macOS) and Windows.
- [cross-env](https://github.com/kentcdodds/cross-env) is similar to shx, but
for allowing us to set environment variables in a way that also works on
Windows.
- [cross-env](https://github.com/kentcdodds/cross-env) is similar to shx, but
for allowing us to set environment variables in a way that also works on
Windows.
- We don't need `ajv`, but it is a transitive dependency which breaks the
build if we let its version be resolved via the yarn resolution mechanism.
Taking a direct dependency on it is the easiest workaround for now.
- We don't need `ajv`, but it is a transitive dependency which breaks the build
if we let its version be resolved via the yarn resolution mechanism. Taking a
direct dependency on it is the easiest workaround for now.
## Functionality

View File

@@ -6,9 +6,9 @@
Launch the app in development mode:
- Transpiles the files in `src/` and starts the main process.
- Transpiles the files in `src/` and starts the main process.
- Runs a development server for the renderer, with hot module reload.
- Runs a development server for the renderer, with hot module reload.
### yarn build

View File

@@ -2,21 +2,21 @@
Conceptually, the release is straightforward:
1. We trigger a GitHub workflow that creates a (pre-)release with the build.
1. We trigger a GitHub workflow that creates a (pre-)release with the build.
2. When ready, we make that release the latest.
2. When ready, we make that release the latest.
3. The download links on our website, and existing apps already check the
latest GitHub release and update automatically.
3. The download links on our website, and existing apps already check the latest
GitHub release and update automatically.
The complication comes from the fact that electron-builder's auto updater (the
mechanism that we use for auto updates) doesn't work with monorepos. So we need
to keep a separate repository just for holding the releases.
- Source code lives here, in [ente-io/ente](https://github.com/ente-io/ente).
- Source code lives here, in [ente-io/ente](https://github.com/ente-io/ente).
- Releases are done from
[ente-io/photos-desktop](https://github.com/ente-io/photos-desktop).
- Releases are done from
[ente-io/photos-desktop](https://github.com/ente-io/photos-desktop).
## Nightly builds
@@ -32,17 +32,17 @@ gh workflow run desktop-release.yml --source=<branch>
## Release checklist
1. Update source repo to set version `1.x.x` in `package.json` and finalize the
CHANGELOG.
1. Update source repo to set version `1.x.x` in `package.json` and finalize the
CHANGELOG.
2. Merge PR then tag the merge commit on `main` in the source repo:
2. Merge PR then tag the merge commit on `main` in the source repo:
```sh
git tag photosd-v1.x.x
git push origin photosd-v1.x.x
```
3. In the release repo:
3. In the release repo:
```sh
./.github/trigger-release.sh v1.x.x
@@ -56,20 +56,20 @@ Once it is marked as latest, the release goes live.
We are done at this point, and can now update the other pre-release that'll hold
subsequent nightly builds.
1. Update `package.json` in the source repo to use version `1.x.x-beta`, and
merge these changes into `main`.
1. Update `package.json` in the source repo to use version `1.x.x-beta`, and
merge these changes into `main`.
2. In the release repo, delete the existing _nightly_ pre-release, then:
2. In the release repo, delete the existing _nightly_ pre-release, then:
```sh
git tag v1.x.x-beta
git push origin v1.x.x-beta
```
3. Start a new run of the workflow (`gh workflow run desktop-release.yml`).
3. Start a new run of the workflow (`gh workflow run desktop-release.yml`).
4. Once the workflow creates the new 1.x.x-beta pre-release, edit its
description to "Nightly builds".
4. Once the workflow creates the new 1.x.x-beta pre-release, edit its
description to "Nightly builds".
Subsequent scheduled nightly workflows will keep updating this pre-release.
@@ -77,14 +77,14 @@ Subsequent scheduled nightly workflows will keep updating this pre-release.
To create extra one-off pre-releases in addition to the nightly `1.x.x-beta`s,
1. In your branch in the source repository, set the version in `package.json`
to something different, say `1.x.x-foo`.
1. In your branch in the source repository, set the version in `package.json` to
something different, say `1.x.x-foo`.
2. Create a new pre-release in the release repo with title `1.x.x-foo`. In the
tag input enter `v1.x.x-foo` and select the option to "Create a new tag on
publish".
2. Create a new pre-release in the release repo with title `1.x.x-foo`. In the
tag input enter `v1.x.x-foo` and select the option to "Create a new tag on
publish".
3. Trigger the workflow in the release repo:
3. Trigger the workflow in the release repo:
```sh
gh workflow run desktop-release.yml --source=my-branch
@@ -95,9 +95,9 @@ To create extra one-off pre-releases in addition to the nightly `1.x.x-beta`s,
The GitHub Action runs on Windows, Linux and macOS. It produces the artifacts
defined in the `build` value in `package.json`.
- Windows - An NSIS installer.
- Linux - An AppImage, and 3 other packages (`.rpm`, `.deb`, `.pacman`)
- macOS - A universal DMG
- Windows - An NSIS installer.
- Linux - An AppImage, and 3 other packages (`.rpm`, `.deb`, `.pacman`)
- macOS - A universal DMG
Additionally, the GitHub action notarizes and signs the macOS DMG (For this it
uses credentials provided via GitHub secrets).
@@ -105,16 +105,16 @@ uses credentials provided via GitHub secrets).
To rollout the build, we need to publish the draft release. Thereafter,
everything is automated:
- The website automatically redirects to the latest release on GitHub when
people try to download.
- The website automatically redirects to the latest release on GitHub when
people try to download.
- The file formats with support auto update (Windows `exe`, the Linux AppImage
and the macOS DMG) also check the latest GitHub release automatically to
download and apply the update (the rest of the formats don't support auto
updates yet).
- The file formats with support auto update (Windows `exe`, the Linux AppImage
and the macOS DMG) also check the latest GitHub release automatically to
download and apply the update (the rest of the formats don't support auto
updates yet).
- We're not putting the desktop app in other stores currently. It is available
as a `brew cask`, but we only had to open a PR to add the initial formula,
now their maintainers automatically bump the SHA, version number and the
(derived from the version) URL in the formula when their tools notice a new
release on our GitHub.
- We're not putting the desktop app in other stores currently. It is available
as a `brew cask`, but we only had to open a PR to add the initial formula, now
their maintainers automatically bump the SHA, version number and the (derived
from the version) URL in the formula when their tools notice a new release on
our GitHub.

View File

@@ -1,6 +1,6 @@
{
"name": "ente",
"version": "1.7.8-beta",
"version": "1.7.9-beta",
"private": true,
"description": "Desktop client for Ente Photos",
"repository": "github:ente-io/photos-desktop",
@@ -30,7 +30,7 @@
"clip-bpe-js": "^0.0.6",
"comlink": "^4.4.2",
"compare-versions": "^6.1.1",
"electron-log": "^5.2.3",
"electron-log": "^5.2.4",
"electron-store": "^8.2.0",
"electron-updater": "^6.3.9",
"ffmpeg-static": "^5.2.0",
@@ -40,23 +40,23 @@
"onnxruntime-node": "^1.20.1"
},
"devDependencies": {
"@eslint/js": "^9.15.0",
"@eslint/js": "^9.17.0",
"@tsconfig/node20": "^20.1.4",
"@types/auto-launch": "^5.0.5",
"@types/eslint__js": "^8.42.3",
"@types/ffmpeg-static": "^3.0.3",
"ajv": "^8.17.1",
"concurrently": "^9.1.0",
"concurrently": "^9.1.1",
"cross-env": "^7.0.3",
"electron": "^33.2.1",
"electron-builder": "^25.1.8",
"eslint": "^9",
"prettier": "3.3.3",
"prettier": "3.4.2",
"prettier-plugin-organize-imports": "^4.1.0",
"prettier-plugin-packagejson": "^2.5.6",
"shx": "^0.3.4",
"typescript": "^5.7.2",
"typescript-eslint": "^8.16.0"
"typescript-eslint": "^8.18.2"
},
"packageManager": "yarn@1.22.22",
"productName": "ente"

View File

@@ -255,10 +255,10 @@ const registerPrivilegedSchemes = () => {
* See: [Note: Passkey verification in the desktop app].
*
* Implementation notes:
* - https://www.electronjs.org/docs/latest/tutorial/launch-app-from-url-in-another-app
* - This works only when the app is packaged.
* - On Windows and Linux, we get the deeplink in the "second-instance" event.
* - On macOS, we get the deeplink in the "open-url" event.
* - https://www.electronjs.org/docs/latest/tutorial/launch-app-from-url-in-another-app
* - This works only when the app is packaged.
* - On Windows and Linux, we get the deeplink in the "second-instance" event.
* - On macOS, we get the deeplink in the "open-url" event.
*/
const registerForEnteLinks = () => app.setAsDefaultProtocolClient("ente");

View File

@@ -106,10 +106,26 @@ export const setupAutoUpdater = (mainWindow: BrowserWindow) => {
export const forceCheckForAppUpdates = (mainWindow: BrowserWindow) => {
userPreferences.delete("skipAppVersion");
userPreferences.delete("muteUpdateNotificationVersion");
void checkForUpdatesAndNotify(mainWindow);
void checkForUpdatesAndNotify(mainWindow, { notifyImmediately: true });
};
const checkForUpdatesAndNotify = async (mainWindow: BrowserWindow) => {
interface CheckForUpdatesAndNotifyOpts {
/**
* By default, the updater waits for 5 minutes after an update has been
* downloaded before notifying the user. This is so as to not get in their
* way during an app launch.
*
* However, when the user clicks the "Check for updates..." menu action,
* they would prefer more immediate feedback, so this flag allows us to
* bypass this delay.
*/
notifyImmediately?: boolean;
}
const checkForUpdatesAndNotify = async (
mainWindow: BrowserWindow,
opts?: CheckForUpdatesAndNotifyOpts,
) => {
const updateCheckResult = await autoUpdater.checkForUpdates();
if (!updateCheckResult) {
log.error("Failed to check for updates");
@@ -148,7 +164,7 @@ const checkForUpdatesAndNotify = async (mainWindow: BrowserWindow) => {
log.info(`Update downloaded ${version}`);
timeout = setTimeout(
() => showUpdateDialog({ autoUpdatable: true, version }),
fiveMinutes,
opts?.notifyImmediately ? 0 : fiveMinutes,
);
});

View File

@@ -57,9 +57,9 @@ let _child: UtilityProcess | undefined;
*
* So we
*
* 1. In the utility process create a message channel.
* 2. Spawn a utility process, and send one port of the pair to it.
* 3. Send the other port of the pair to the renderer.
* 1. In the utility process create a message channel.
* 2. Spawn a utility process, and send one port of the pair to it.
* 3. Send the other port of the pair to the renderer.
*
* The renderer will forward that port to the web worker that is coordinating
* the ML indexing on the web layer. Thereafter, the utility process and web

View File

@@ -31,9 +31,9 @@
* and when changing one of them, remember to see if the other two also need
* changing:
*
* - [renderer] web/packages/base/types/ipc.ts contains docs
* - [preload] desktop/src/preload.ts ↕︎
* - [main] desktop/src/main/ipc.ts contains impl
* - [renderer] web/packages/base/types/ipc.ts contains docs
* - [preload] desktop/src/preload.ts ↕︎
* - [main] desktop/src/main/ipc.ts contains impl
*/
// This code runs in the (isolated) web layer. Contrary to the impression given
@@ -98,6 +98,14 @@ const openLogDirectory = () => ipcRenderer.invoke("openLogDirectory");
const selectDirectory = () => ipcRenderer.invoke("selectDirectory");
// The path that we get back from `webUtils.getPathForFile` on Windows uses "\"
// as the path separator. Convert them to POSIX separators.
const pathForFile =
process.platform == "win32"
? (file: File) => webUtils.getPathForFile(file).replace(/\\/g, "/")
: (file: File) => webUtils.getPathForFile(file);
const logout = () => {
watchRemoveListeners();
return ipcRenderer.invoke("logout");
@@ -263,14 +271,6 @@ const watchRemoveListeners = () => {
// - Upload
// The path that we get back from `webUtils.getPathForFile` on Windows uses "\"
// as the path separator. Convert them to POSIX separators.
const pathForFile =
process.platform == "win32"
? (file: File) => webUtils.getPathForFile(file).replace(/\\/g, "/")
: (file: File) => webUtils.getPathForFile(file);
const listZipItems = (zipPath: string) =>
ipcRenderer.invoke("listZipItems", zipPath);
@@ -341,6 +341,7 @@ contextBridge.exposeInMainWorld("electron", {
openDirectory,
openLogDirectory,
selectDirectory,
pathForFile,
logout,
masterKeyB64,
saveMasterKeyB64,
@@ -395,7 +396,6 @@ contextBridge.exposeInMainWorld("electron", {
// - Upload
pathForFile,
listZipItems,
pathOrZipItemSize,
pendingUploads,

View File

@@ -144,10 +144,10 @@
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06"
integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==
"@eslint/js@^9.15.0":
version "9.15.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.15.0.tgz#df0e24fe869143b59731942128c19938fdbadfb5"
integrity sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==
"@eslint/js@^9.17.0":
version "9.17.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.17.0.tgz#1523e586791f80376a6f8398a3964455ecc651ec"
integrity sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==
"@eslint/object-schema@^2.1.4":
version "2.1.4"
@@ -384,62 +384,62 @@
dependencies:
"@types/node" "*"
"@typescript-eslint/eslint-plugin@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz#ac56825bcdf3b392fc76a94b1315d4a162f201a6"
integrity sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==
"@typescript-eslint/eslint-plugin@8.18.2":
version "8.18.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.2.tgz#c78e363ab5fe3b21dd1c90d8be9581534417f78e"
integrity sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg==
dependencies:
"@eslint-community/regexpp" "^4.10.0"
"@typescript-eslint/scope-manager" "8.16.0"
"@typescript-eslint/type-utils" "8.16.0"
"@typescript-eslint/utils" "8.16.0"
"@typescript-eslint/visitor-keys" "8.16.0"
"@typescript-eslint/scope-manager" "8.18.2"
"@typescript-eslint/type-utils" "8.18.2"
"@typescript-eslint/utils" "8.18.2"
"@typescript-eslint/visitor-keys" "8.18.2"
graphemer "^1.4.0"
ignore "^5.3.1"
natural-compare "^1.4.0"
ts-api-utils "^1.3.0"
"@typescript-eslint/parser@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.16.0.tgz#ee5b2d6241c1ab3e2e53f03fd5a32d8e266d8e06"
integrity sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==
"@typescript-eslint/parser@8.18.2":
version "8.18.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.18.2.tgz#0379a2e881d51d8fcf7ebdfa0dd18eee79182ce2"
integrity sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA==
dependencies:
"@typescript-eslint/scope-manager" "8.16.0"
"@typescript-eslint/types" "8.16.0"
"@typescript-eslint/typescript-estree" "8.16.0"
"@typescript-eslint/visitor-keys" "8.16.0"
"@typescript-eslint/scope-manager" "8.18.2"
"@typescript-eslint/types" "8.18.2"
"@typescript-eslint/typescript-estree" "8.18.2"
"@typescript-eslint/visitor-keys" "8.18.2"
debug "^4.3.4"
"@typescript-eslint/scope-manager@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz#ebc9a3b399a69a6052f3d88174456dd399ef5905"
integrity sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==
"@typescript-eslint/scope-manager@8.18.2":
version "8.18.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.18.2.tgz#d193c200d61eb0ddec5987c8e48c9d4e1c0510bd"
integrity sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==
dependencies:
"@typescript-eslint/types" "8.16.0"
"@typescript-eslint/visitor-keys" "8.16.0"
"@typescript-eslint/types" "8.18.2"
"@typescript-eslint/visitor-keys" "8.18.2"
"@typescript-eslint/type-utils@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.16.0.tgz#585388735f7ac390f07c885845c3d185d1b64740"
integrity sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==
"@typescript-eslint/type-utils@8.18.2":
version "8.18.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.18.2.tgz#5ad07e09002eee237591881df674c1c0c91ca52f"
integrity sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==
dependencies:
"@typescript-eslint/typescript-estree" "8.16.0"
"@typescript-eslint/utils" "8.16.0"
"@typescript-eslint/typescript-estree" "8.18.2"
"@typescript-eslint/utils" "8.18.2"
debug "^4.3.4"
ts-api-utils "^1.3.0"
"@typescript-eslint/types@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.16.0.tgz#49c92ae1b57942458ab83d9ec7ccab3005e64737"
integrity sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==
"@typescript-eslint/types@8.18.2":
version "8.18.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.18.2.tgz#5ebad5b384c8aa1c0f86cee1c61bcdbe7511f547"
integrity sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==
"@typescript-eslint/typescript-estree@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz#9d741e56e5b13469b5190e763432ce5551a9300c"
integrity sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==
"@typescript-eslint/typescript-estree@8.18.2":
version "8.18.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.2.tgz#fffb85527f8304e29bfbbdc712f4515da9f8b47c"
integrity sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==
dependencies:
"@typescript-eslint/types" "8.16.0"
"@typescript-eslint/visitor-keys" "8.16.0"
"@typescript-eslint/types" "8.18.2"
"@typescript-eslint/visitor-keys" "8.18.2"
debug "^4.3.4"
fast-glob "^3.3.2"
is-glob "^4.0.3"
@@ -447,22 +447,22 @@
semver "^7.6.0"
ts-api-utils "^1.3.0"
"@typescript-eslint/utils@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.16.0.tgz#c71264c437157feaa97842809836254a6fc833c3"
integrity sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==
"@typescript-eslint/utils@8.18.2":
version "8.18.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.18.2.tgz#a2635f71904a84f9e47fe1b6f65a6d944ff1adf9"
integrity sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
"@typescript-eslint/scope-manager" "8.16.0"
"@typescript-eslint/types" "8.16.0"
"@typescript-eslint/typescript-estree" "8.16.0"
"@typescript-eslint/scope-manager" "8.18.2"
"@typescript-eslint/types" "8.18.2"
"@typescript-eslint/typescript-estree" "8.18.2"
"@typescript-eslint/visitor-keys@8.16.0":
version "8.16.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz#d5086afc060b01ff7a4ecab8d49d13d5a7b07705"
integrity sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==
"@typescript-eslint/visitor-keys@8.18.2":
version "8.18.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.2.tgz#b3e434b701f086b10a7c82416ebc56899d27ef2f"
integrity sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==
dependencies:
"@typescript-eslint/types" "8.16.0"
"@typescript-eslint/types" "8.18.2"
eslint-visitor-keys "^4.2.0"
"@xmldom/xmldom@^0.8.8":
@@ -999,10 +999,10 @@ concat-stream@^2.0.0:
readable-stream "^3.0.2"
typedarray "^0.0.6"
concurrently@^9.1.0:
version "9.1.0"
resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.1.0.tgz#8da6d609f4321752912dab9be8710232ac496aa0"
integrity sha512-VxkzwMAn4LP7WyMnJNbHN5mKV9L2IbyDjpzemKr99sXNR3GqRNMMHdm7prV1ws9wg7ETj6WUkNOigZVsptwbgg==
concurrently@^9.1.1:
version "9.1.1"
resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.1.1.tgz#609dde2ce12f4f12d6a5ea6eace4c38bb7ab2ead"
integrity sha512-6VX8lrBIycgZKTwBsWS+bLrmkGRkDmvtGsYylRN9b93CygN6CbK46HmnQ3rdSOR8HRjdahDrxb5MqD9cEFOg5Q==
dependencies:
chalk "^4.1.2"
lodash "^4.17.21"
@@ -1233,10 +1233,10 @@ electron-builder@^25.1.8:
simple-update-notifier "2.0.0"
yargs "^17.6.2"
electron-log@^5.2.3:
version "5.2.3"
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.2.3.tgz#b58447b2158b9aa5faa07c4d15340113069d3f15"
integrity sha512-BabCiEV+p362LzY0EFE8hyzeGknzKDWSbhS0VFfRYQGA4FHWXWSfaKJlvTR9LFepNoORXxc/BWvqBXIPgsVFgA==
electron-log@^5.2.4:
version "5.2.4"
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.2.4.tgz#6b488d9db80aa3c6f3dc39bcd635fc9d1f79c8af"
integrity sha512-iX12WXc5XAaKeHg2QpiFjVwL+S1NVHPFd3V5RXtCmKhpAzXsVQnR3UEc0LovM6p6NkUQxDWnkdkaam9FNUVmCA==
electron-publish@25.1.7:
version "25.1.7"
@@ -2732,10 +2732,10 @@ prettier-plugin-packagejson@^2.5.6:
sort-package-json "2.12.0"
synckit "0.9.2"
prettier@3.3.3:
version "3.3.3"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105"
integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==
prettier@3.4.2:
version "3.4.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f"
integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==
progress@^2.0.3:
version "2.0.3"
@@ -3264,14 +3264,14 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
typescript-eslint@^8.16.0:
version "8.16.0"
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.16.0.tgz#d608c972d6b2461ca10ec30fd3fa62a080baba19"
integrity sha512-wDkVmlY6O2do4V+lZd0GtRfbtXbeD0q9WygwXXSJnC1xorE8eqyC2L1tJimqpSeFrOzRlYtWnUp/uzgHQOgfBQ==
typescript-eslint@^8.18.2:
version "8.18.2"
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.18.2.tgz#71334dcf843adc3fbb771dce5ade7876aa0d62b7"
integrity sha512-KuXezG6jHkvC3MvizeXgupZzaG5wjhU3yE8E7e6viOvAvD9xAWYp8/vy0WULTGe9DYDWcQu7aW03YIV3mSitrQ==
dependencies:
"@typescript-eslint/eslint-plugin" "8.16.0"
"@typescript-eslint/parser" "8.16.0"
"@typescript-eslint/utils" "8.16.0"
"@typescript-eslint/eslint-plugin" "8.18.2"
"@typescript-eslint/parser" "8.18.2"
"@typescript-eslint/utils" "8.18.2"
typescript@^5.4.3:
version "5.5.4"

View File

@@ -231,11 +231,14 @@ export const sidebar = [
collapsed: true,
items: [
{ text: "Getting started", link: "/self-hosting/" },
{ text: "System requirements", link: "/self-hosting/guides/system-requirements", },
{
text: "System requirements",
link: "/self-hosting/guides/system-requirements",
},
{
text: "Guides",
items: [
{ text: "Introduction", link: "/self-hosting/guides/" },
{ text: "Introduction", link: "/self-hosting/guides/" },
{
text: "Connect to custom server",
link: "/self-hosting/guides/custom-server/",
@@ -271,8 +274,8 @@ export const sidebar = [
},
{
text: "Configure CLI for Self Hosted Instance",
link: "/self-hosting/guides/selfhost-cli"
}
link: "/self-hosting/guides/selfhost-cli",
},
],
},
{

View File

@@ -11,9 +11,9 @@ Ente is a end-to-end encrypted platform for privately, reliably, and securely
storing your data on the cloud. On top of this platform, Ente offers two
products:
- **Ente Photos** - An alternative to Google Photos and Apple Photos
- **Ente Photos** - An alternative to Google Photos and Apple Photos
- **Ente Auth** - A free 2FA alternative to Authy
- **Ente Auth** - A free 2FA alternative to Authy
Both these apps are available for all desktop (Linux, Mac, Windows) and mobile
(Android, iOS and F-Droid) platforms. They also work directly in your web
@@ -46,7 +46,8 @@ the name, and also led to the adoption of "Ducky", Ente's mascot:
</div>
For the full origin story of Ducky you can check out [this blog post](https://ente.io/blog/ducky/).
For the full origin story of Ducky you can check out
[this blog post](https://ente.io/blog/ducky/).
### How do I pronounce Ente?

View File

@@ -17,7 +17,6 @@ You can install Auth directly from
Reproducible builds for Auth are available on
[F-Droid](https://f-droid.org/packages/io.ente.auth/).
> [!NOTE]
>
> Releases over F-Droid are generally slower since they run their own build
@@ -34,20 +33,22 @@ you stay updated.
### Obtainium
You can setup [Obtainium](https://github.com/ImranR98/Obtainium) to track our
GitHub releases by [clicking this link](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22io.ente.auth.independent%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2Fente-io%2Fente%22%2C%22author%22%3A%22ente-io%22%2C%22name%22%3A%22Ente%20Auth%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Atrue%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22ente-auth*%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D) to add it instantly.
GitHub releases by
[clicking this link](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22io.ente.auth.independent%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2Fente-io%2Fente%22%2C%22author%22%3A%22ente-io%22%2C%22name%22%3A%22Ente%20Auth%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Atrue%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22ente-auth*%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D)
to add it instantly.
Alternatively, you can follow these steps:
1. Click **Add App** to open a new app config screen
2. Enter `https://github.com/ente-io/ente` in the **App Source URL** field
3. Enable the **Retain release order** from API toggle
4. Scroll down to the **Filter APKs by Regular Expression** field and enter `ente-auth*`
4. Scroll down to the **Filter APKs by Regular Expression** field and enter
`ente-auth*`
5. Enable the **Attempt to filter APKs by CPU architecture** if possible toggle
6. Select any applicable app category labels you may have setup
7. Enable the **Try inferring app ID from source code** toggle
8. Scroll back to the top and click **Add** to complete the setup
<br/>
---
@@ -78,7 +79,8 @@ You can grab the latest version of Ente Auth for Mac, Windows and Linux from
# Web
Latest versions of our web app are available at [auth.ente.io](https://auth.ente.io).
Latest versions of our web app are available at
[auth.ente.io](https://auth.ente.io).
<br/>

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